Search in sources :

Example 16 with Link

use of org.apache.tapestry5.http.Link in project tapestry-5 by apache.

the class AppPageRenderLinkTransformer method transformPageRenderLink.

public Link transformPageRenderLink(Link defaultLink, PageRenderRequestParameters parameters) {
    if (!parameters.getLogicalPageName().equals("View"))
        return null;
    StringBuilder path = new StringBuilder();
    Locale locale = persistentLocale.get();
    if (locale != null)
        path.append('/').append(locale.toString());
    path.append('/');
    // Cheating: we know there's exactly one value in the context.
    path.append(parameters.getActivationContext().get(String.class, 0));
    return defaultLink.copyWithBasePath(path.toString());
}
Also used : PersistentLocale(org.apache.tapestry5.services.PersistentLocale) Locale(java.util.Locale)

Example 17 with Link

use of org.apache.tapestry5.http.Link in project tapestry-5 by apache.

the class JSONObject method append.

/**
 * Appends values to the array mapped to {@code name}. A new {@link JSONArray}
 * mapping for {@code name} will be inserted if no mapping exists. If the existing
 * mapping for {@code name} is not a {@link JSONArray}, a {@link RuntimeException}
 * will be thrown.
 *
 * @param name  The name of the array to which the value should be appended.
 * @param value The value to append.
 * @return this object.
 * @throws JSONTypeMismatchException if {@code name} is {@code null} or if the mapping for
 *                       {@code name} is non-null and is not a {@link JSONArray}.
 */
public JSONObject append(String name, Object value) {
    JSON.testValidity(value);
    Object current = nameValuePairs.get(checkName(name));
    final JSONArray array;
    if (current instanceof JSONArray) {
        array = (JSONArray) current;
    } else if (current == null) {
        JSONArray newArray = new JSONArray();
        nameValuePairs.put(name, newArray);
        array = newArray;
    } else {
        throw new JSONTypeMismatchException("JSONObject[\"" + name + "\"]", JSONType.ARRAY, current.getClass());
    }
    array.checkedPut(value);
    return this;
}
Also used : JSONTypeMismatchException(org.apache.tapestry5.json.exceptions.JSONTypeMismatchException)

Example 18 with Link

use of org.apache.tapestry5.http.Link in project tapestry-5 by apache.

the class ASMifier method appendConstant.

/**
 * Appends a string representation of the given constant to {@link #stringBuilder}.
 *
 * @param value a {@link String}, {@link Type}, {@link Handle}, {@link Byte}, {@link Short},
 *     {@link Character}, {@link Integer}, {@link Float}, {@link Long} or {@link Double} object,
 *     or an array of primitive values. May be {@literal null}.
 */
protected void appendConstant(final Object value) {
    if (value == null) {
        stringBuilder.append("null");
    } else if (value instanceof String) {
        appendString(stringBuilder, (String) value);
    } else if (value instanceof Type) {
        stringBuilder.append("Type.getType(\"");
        stringBuilder.append(((Type) value).getDescriptor());
        stringBuilder.append("\")");
    } else if (value instanceof Handle) {
        stringBuilder.append("new Handle(");
        Handle handle = (Handle) value;
        stringBuilder.append("Opcodes.").append(HANDLE_TAG[handle.getTag()]).append(", \"");
        stringBuilder.append(handle.getOwner()).append(COMMA);
        stringBuilder.append(handle.getName()).append(COMMA);
        stringBuilder.append(handle.getDesc()).append("\", ");
        stringBuilder.append(handle.isInterface()).append(")");
    } else if (value instanceof ConstantDynamic) {
        stringBuilder.append("new ConstantDynamic(\"");
        ConstantDynamic constantDynamic = (ConstantDynamic) value;
        stringBuilder.append(constantDynamic.getName()).append(COMMA);
        stringBuilder.append(constantDynamic.getDescriptor()).append("\", ");
        appendConstant(constantDynamic.getBootstrapMethod());
        stringBuilder.append(NEW_OBJECT_ARRAY);
        int bootstrapMethodArgumentCount = constantDynamic.getBootstrapMethodArgumentCount();
        for (int i = 0; i < bootstrapMethodArgumentCount; ++i) {
            appendConstant(constantDynamic.getBootstrapMethodArgument(i));
            if (i != bootstrapMethodArgumentCount - 1) {
                stringBuilder.append(", ");
            }
        }
        stringBuilder.append("})");
    } else if (value instanceof Byte) {
        stringBuilder.append("new Byte((byte)").append(value).append(')');
    } else if (value instanceof Boolean) {
        stringBuilder.append(((Boolean) value).booleanValue() ? "Boolean.TRUE" : "Boolean.FALSE");
    } else if (value instanceof Short) {
        stringBuilder.append("new Short((short)").append(value).append(')');
    } else if (value instanceof Character) {
        stringBuilder.append("new Character((char)").append((int) ((Character) value).charValue()).append(')');
    } else if (value instanceof Integer) {
        stringBuilder.append("new Integer(").append(value).append(')');
    } else if (value instanceof Float) {
        stringBuilder.append("new Float(\"").append(value).append("\")");
    } else if (value instanceof Long) {
        stringBuilder.append("new Long(").append(value).append("L)");
    } else if (value instanceof Double) {
        stringBuilder.append("new Double(\"").append(value).append("\")");
    } else if (value instanceof byte[]) {
        byte[] byteArray = (byte[]) value;
        stringBuilder.append("new byte[] {");
        for (int i = 0; i < byteArray.length; i++) {
            stringBuilder.append(i == 0 ? "" : ",").append(byteArray[i]);
        }
        stringBuilder.append('}');
    } else if (value instanceof boolean[]) {
        boolean[] booleanArray = (boolean[]) value;
        stringBuilder.append("new boolean[] {");
        for (int i = 0; i < booleanArray.length; i++) {
            stringBuilder.append(i == 0 ? "" : ",").append(booleanArray[i]);
        }
        stringBuilder.append('}');
    } else if (value instanceof short[]) {
        short[] shortArray = (short[]) value;
        stringBuilder.append("new short[] {");
        for (int i = 0; i < shortArray.length; i++) {
            stringBuilder.append(i == 0 ? "" : ",").append("(short)").append(shortArray[i]);
        }
        stringBuilder.append('}');
    } else if (value instanceof char[]) {
        char[] charArray = (char[]) value;
        stringBuilder.append("new char[] {");
        for (int i = 0; i < charArray.length; i++) {
            stringBuilder.append(i == 0 ? "" : ",").append("(char)").append((int) charArray[i]);
        }
        stringBuilder.append('}');
    } else if (value instanceof int[]) {
        int[] intArray = (int[]) value;
        stringBuilder.append("new int[] {");
        for (int i = 0; i < intArray.length; i++) {
            stringBuilder.append(i == 0 ? "" : ",").append(intArray[i]);
        }
        stringBuilder.append('}');
    } else if (value instanceof long[]) {
        long[] longArray = (long[]) value;
        stringBuilder.append("new long[] {");
        for (int i = 0; i < longArray.length; i++) {
            stringBuilder.append(i == 0 ? "" : ",").append(longArray[i]).append('L');
        }
        stringBuilder.append('}');
    } else if (value instanceof float[]) {
        float[] floatArray = (float[]) value;
        stringBuilder.append("new float[] {");
        for (int i = 0; i < floatArray.length; i++) {
            stringBuilder.append(i == 0 ? "" : ",").append(floatArray[i]).append('f');
        }
        stringBuilder.append('}');
    } else if (value instanceof double[]) {
        double[] doubleArray = (double[]) value;
        stringBuilder.append("new double[] {");
        for (int i = 0; i < doubleArray.length; i++) {
            stringBuilder.append(i == 0 ? "" : ",").append(doubleArray[i]).append('d');
        }
        stringBuilder.append('}');
    }
}
Also used : Handle(org.apache.tapestry5.internal.plastic.asm.Handle) ConstantDynamic(org.apache.tapestry5.internal.plastic.asm.ConstantDynamic) Type(org.apache.tapestry5.internal.plastic.asm.Type)

Example 19 with Link

use of org.apache.tapestry5.http.Link in project tapestry-5 by apache.

the class BindParameterWorker method getEmbeddedComponentResourcesForPublishedParameter.

/**
 * Returns the {@link InternalComponentResources} of an embeddedComponent that contains the published parameter
 * publishedParameterName. This is basically a recursive search for published parameters.
 */
private InternalComponentResources getEmbeddedComponentResourcesForPublishedParameter(InternalComponentResources containerResources, String publishedParameterName) {
    List<InternalComponentResources> embeddedComponentResourcesList = CollectionFactory.newList();
    embeddedComponentResourcesList.add(containerResources);
    while (!embeddedComponentResourcesList.isEmpty()) {
        InternalComponentResources resources = embeddedComponentResourcesList.remove(0);
        ComponentModel containerComponentModel = resources.getComponentModel();
        for (String embeddedComponentId : containerComponentModel.getEmbeddedComponentIds()) {
            EmbeddedComponentModel embeddedComponentModel = containerComponentModel.getEmbeddedComponentModel(embeddedComponentId);
            InternalComponentResources embeddedComponentResources = (InternalComponentResources) resources.getEmbeddedComponent(embeddedComponentId).getComponentResources();
            /**
             * If the parameter is not a formal parameter, then the parameter must be a published parameter
             * of an embeddedComponent of the component we are currently examining.
             */
            if (embeddedComponentModel.getPublishedParameters().contains(publishedParameterName) && embeddedComponentResources.getComponentModel().isFormalParameter(publishedParameterName)) {
                return embeddedComponentResources;
            }
            embeddedComponentResourcesList.add(embeddedComponentResources);
        }
    }
    return null;
}
Also used : EmbeddedComponentModel(org.apache.tapestry5.model.EmbeddedComponentModel) InternalComponentResources(org.apache.tapestry5.internal.InternalComponentResources) ComponentModel(org.apache.tapestry5.model.ComponentModel) MutableComponentModel(org.apache.tapestry5.model.MutableComponentModel) EmbeddedComponentModel(org.apache.tapestry5.model.EmbeddedComponentModel)

Example 20 with Link

use of org.apache.tapestry5.http.Link in project tapestry-5 by apache.

the class ActivationRequestParameterWorker method decorateLinks.

@SuppressWarnings("all")
private static void decorateLinks(TransformationSupport support, String fieldName, final FieldHandle handle, final String parameterName, final ValueEncoder encoder, final URLEncoder urlEncoder) {
    ComponentEventHandler handler = new ComponentEventHandler() {

        public void handleEvent(Component instance, ComponentEvent event) {
            Object value = handle.get(instance);
            if (value == null) {
                return;
            }
            Link link = event.getEventContext().get(Link.class, 0);
            String clientValue = encoder.toClient(value);
            // TAP5-1768: escape special characters
            clientValue = urlEncoder.encode(clientValue);
            link.addParameter(parameterName, clientValue);
        }
    };
    support.addEventHandler(EventConstants.DECORATE_COMPONENT_EVENT_LINK, 0, String.format("ActivationRequestParameterWorker decorate component event link event handler for field %s as query parameter '%s'", fieldName, parameterName), handler);
    support.addEventHandler(EventConstants.DECORATE_PAGE_RENDER_LINK, 0, String.format("ActivationRequestParameterWorker decorate page render link event handler for field %s as query parameter '%s'", fieldName, parameterName), handler);
}
Also used : ComponentEventHandler(org.apache.tapestry5.services.ComponentEventHandler) ComponentEvent(org.apache.tapestry5.runtime.ComponentEvent) Component(org.apache.tapestry5.runtime.Component) Link(org.apache.tapestry5.http.Link)

Aggregations

Link (org.apache.tapestry5.http.Link)66 Test (org.testng.annotations.Test)37 Response (org.apache.tapestry5.http.services.Response)19 MarkupWriter (org.apache.tapestry5.MarkupWriter)10 JSONObject (org.apache.tapestry5.json.JSONObject)10 ComponentEventLinkEncoder (org.apache.tapestry5.services.ComponentEventLinkEncoder)10 Request (org.apache.tapestry5.http.services.Request)8 PageRenderRequestParameters (org.apache.tapestry5.services.PageRenderRequestParameters)8 Element (org.apache.tapestry5.dom.Element)7 Contribute (org.apache.tapestry5.ioc.annotations.Contribute)7 Link (org.apache.tapestry5.Link)6 LinkCreationListener2 (org.apache.tapestry5.services.LinkCreationListener2)6 EventContext (org.apache.tapestry5.EventContext)5 ComponentClassResolver (org.apache.tapestry5.services.ComponentClassResolver)5 IOException (java.io.IOException)4 TapestryException (org.apache.tapestry5.commons.internal.util.TapestryException)4 BaseURLSource (org.apache.tapestry5.http.services.BaseURLSource)4 Page (org.apache.tapestry5.internal.structure.Page)4 List (java.util.List)3 ComponentResources (org.apache.tapestry5.ComponentResources)3