Search in sources :

Example 16 with Category

use of com.codename1.rad.nodes.ActionNode.Category in project CodenameOne by codenameone.

the class AndroidImplementation method firePendingPushes.

public static void firePendingPushes(final PushCallback c, final Context a) {
    try {
        if (c != null) {
            InputStream i = a.openFileInput("CN1$AndroidPendingNotifications");
            if (i == null) {
                return;
            }
            DataInputStream is = new DataInputStream(i);
            int count = is.readByte();
            for (int iter = 0; iter < count; iter++) {
                boolean hasType = is.readBoolean();
                String actualType = null;
                if (hasType) {
                    actualType = is.readUTF();
                }
                final String t;
                final String b;
                final String category;
                final String image;
                if ("99".equals(actualType)) {
                    // This was a rich push
                    Map<String, String> vals = splitQuery(is.readUTF());
                    t = vals.get("type");
                    b = vals.get("body");
                    category = vals.get("category");
                    image = vals.get("image");
                } else {
                    t = actualType;
                    b = is.readUTF();
                    category = null;
                    image = null;
                }
                long s = is.readLong();
                Display.getInstance().callSerially(new Runnable() {

                    @Override
                    public void run() {
                        Display.getInstance().setProperty("pendingPush", "true");
                        Display.getInstance().setProperty("pushType", t);
                        initPushContent(b, image, t, category, a);
                        if (t != null && ("3".equals(t) || "6".equals(t))) {
                            String[] a = b.split(";");
                            c.push(a[0]);
                            c.push(a[1]);
                        } else if (t != null && ("101".equals(t))) {
                            c.push(b.substring(b.indexOf(" ") + 1));
                        } else {
                            c.push(b);
                        }
                        Display.getInstance().setProperty("pendingPush", null);
                    }
                });
            }
            a.deleteFile("CN1$AndroidPendingNotifications");
        }
    } catch (IOException err) {
    }
}
Also used : BufferedInputStream(com.codename1.io.BufferedInputStream) FileInputStream(java.io.FileInputStream) InputStream(java.io.InputStream) IOException(java.io.IOException) Paint(android.graphics.Paint)

Example 17 with Category

use of com.codename1.rad.nodes.ActionNode.Category in project CodeRAD by shannah.

the class Controller method extendAction.

/**
 * Extends an existing action from one of the parent controllers, and registers it as an action
 * on this controller.
 * @param category The category to register the action to.
 * @param overwriteAttributes Whether to overwrite existing attributes of the action.  If false, attributes
 *                            provided will be ignored when extending actions that already have those attributes
 *                            defined.
 * @param attributes Attributes to add to the action.
 * @return The action that was added.
 * @since 2.0
 */
public ActionNode extendAction(ActionNode.Category category, boolean overwriteAttributes, Attribute... attributes) {
    ActionNode action = getInheritedAction(category);
    if (action == null) {
        action = UI.action(attributes);
    } else {
        action = (ActionNode) action.createProxy(action.getParent());
        action.setAttributes(overwriteAttributes, attributes);
    }
    addActions(category, action);
    return action;
}
Also used : ActionNode(com.codename1.rad.nodes.ActionNode)

Example 18 with Category

use of com.codename1.rad.nodes.ActionNode.Category in project CodeRAD by shannah.

the class UI method actions.

public static ActionsNode actions(Category category, Actions actions) {
    ActionsNode out = actions(actions.toArray());
    out.setAttributes(category);
    return out;
}
Also used : ActionsNode(com.codename1.rad.nodes.ActionsNode)

Example 19 with Category

use of com.codename1.rad.nodes.ActionNode.Category in project CodeRAD by shannah.

the class XMLSchemaGenerator method writeSchema.

public StringBuilder writeSchema(StringBuilder sb, boolean writeHeader) throws IOException {
    if (writeHeader) {
        sb.append("<?xml version=\"1.0\"?>\n");
        alreadyIncludedSet.clear();
    }
    if (writeElements) {
        sb.append("<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">\n");
    }
    if (checksum != null)
        sb.append("<!-- ").append(checksum).append(" -->\n");
    indent += 2;
    for (File includeFile : includes) {
        // String id = includeFile.getAbsolutePath().replace(".", "_").replace(File.separatorChar, '_').replace("/", "_");
        String content;
        try (FileInputStream fis = new FileInputStream(includeFile)) {
            byte[] bytes = new byte[(int) includeFile.length()];
            fis.read(bytes);
            content = new String(bytes, "UTF-8");
        }
        content = content.trim();
        if (content.startsWith("====\n")) {
            // There is head matter
            int headMatterEndPos = content.indexOf("====\n", 5);
            if (headMatterEndPos < 0) {
                throw new IOException("Invalid content found in file " + includeFile + ".  Found head matter with no end separator.");
            }
            String headMatter = content.substring(5, headMatterEndPos + 5).trim();
            content = content.substring(headMatterEndPos + 5).trim();
            if (content.startsWith("<?xml")) {
                content = content.substring(content.indexOf("?>") + 2).trim();
            }
            StringTokenizer strtok = new StringTokenizer(headMatter, "\n");
            while (strtok.hasMoreTokens()) {
                String nextTok = strtok.nextToken().trim();
                if (nextTok.startsWith("requireAttributeGroup ")) {
                    String attGroupCoords = nextTok.substring(nextTok.indexOf(" ") + 1);
                    String prefix = attGroupCoords.substring(0, attGroupCoords.indexOf(":"));
                    String type = attGroupCoords.substring(prefix.length() + 1, attGroupCoords.indexOf(":", prefix.length() + 1));
                    String depth = attGroupCoords.substring(attGroupCoords.lastIndexOf(":") + 1);
                    File attgroupFile = getAttributeGroupFile(new AttributeGroup(prefix, type, Integer.parseInt(depth)));
                    if (!attgroupFile.exists()) {
                        throw new IOException("Cannot find attribute group file at " + attgroupFile + " required by " + includeFile + " while processing schema for " + javaClass);
                    }
                    if (alreadyIncludedSet.contains(attgroupFile.getAbsolutePath())) {
                        continue;
                    }
                    alreadyIncludedSet.add(attgroupFile.getAbsolutePath());
                    try (FileInputStream fis = new FileInputStream(attgroupFile)) {
                        byte[] bytes = new byte[(int) attgroupFile.length()];
                        fis.read(bytes);
                        String tmp = new String(bytes, "UTF-8").trim();
                        if (tmp.startsWith("<?xml")) {
                            tmp = tmp.substring(tmp.indexOf("?>") + 2).trim();
                        }
                        content = tmp + "\n" + content;
                    }
                } else if (nextTok.startsWith("require ")) {
                    TypeElement requiredType = processingEnvironment.getElementUtils().getTypeElement(nextTok.substring(nextTok.indexOf(" ") + 1).trim());
                    if (requiredType != null) {
                        File requiredTypeFile = getClassSchemaFile(requiredType);
                        if (!requiredTypeFile.exists()) {
                            throw new IOException("Cannot find type schema " + requiredTypeFile + " required by " + includeFile + " while processing schema for " + javaClass);
                        }
                        if (alreadyIncludedSet.contains(requiredType.getQualifiedName().toString())) {
                            continue;
                        }
                        alreadyIncludedSet.add(requiredType.getQualifiedName().toString());
                        // System.out.println("including "+requiredType);
                        try (FileInputStream fis = new FileInputStream(requiredTypeFile)) {
                            byte[] bytes = new byte[(int) requiredTypeFile.length()];
                            fis.read(bytes);
                            String tmp = new String(bytes, "UTF-8").trim();
                            if (tmp.startsWith("<?xml")) {
                                tmp = tmp.substring(tmp.indexOf("?>") + 2).trim();
                            }
                            content = tmp + "\n" + content;
                        }
                    }
                }
            }
        } else {
            if (content.startsWith("<?xml")) {
                content = content.substring(content.indexOf("?>") + 2).trim();
            }
        }
        indent(sb, indent).append(content).append("\n");
    }
    if (!writeElements) {
        Set<Element> parentMembers = new HashSet<>();
        String extensionBase = null;
        TypeElement superType = null;
        {
            TypeMirror superclass = javaClass.getSuperclass();
            if (superclass != null && superclass.getKind() == TypeKind.DECLARED) {
                superType = (TypeElement) ((DeclaredType) superclass).asElement();
            }
        }
        if (superType != null) {
            extensionBase = superType.getQualifiedName().toString().replace('.', '_');
            final TypeElement fSuperType = superType;
            final DeclaredType fDeclaredSuperType = (DeclaredType) fSuperType.asType();
            processingEnvironment.getElementUtils().getAllMembers(superType).forEach(e -> {
                if (e.getKind() == ElementKind.METHOD && e.getSimpleName().toString().startsWith("get")) {
                    TypeMirror tm = processingEnvironment.getTypeUtils().asMemberOf(fDeclaredSuperType, e);
                    if (tm.getKind() == TypeKind.EXECUTABLE) {
                        ExecutableType methodMirror = (ExecutableType) tm;
                        TypeMirror methodReturnType = methodMirror.getReturnType();
                        if (methodReturnType.getKind() == TypeKind.TYPEVAR || methodReturnType.getKind() == TypeKind.WILDCARD) {
                            return;
                        }
                    }
                }
                parentMembers.add(e);
            });
        }
        String complexTypeName = javaClass.getQualifiedName().toString().replace('.', '_');
        Set<String> attributeNames = new HashSet<>();
        for (TypeElement clazz : new TypeElement[] { javaClass, builderClass }) {
            if (clazz == null) {
                // The builder class is null
                indent(sb, indent).append("<xs:complexType name=\"").append(complexTypeName).append("-impl\">\n");
                indent(sb, indent).append("  <xs:complexContent>\n");
                indent(sb, indent).append("    <xs:extension base=\"").append(complexTypeName).append("\"/>\n");
                indent(sb, indent).append("  </xs:complexContent>\n");
                indent(sb, indent).append("</xs:complexType>\n");
                continue;
            }
            if (clazz == builderClass) {
                indent(sb, indent).append("<xs:complexType name=\"").append(complexTypeName).append("-impl\">\n");
                indent += 2;
                indent(sb, indent).append("<xs:complexContent>\n");
                indent += 2;
                indent(sb, indent).append("<xs:extension base=\"").append(complexTypeName).append("\">\n");
                indent += 2;
            } else {
                String mixed = extensionBase != null ? "" : " mixed=\"true\"";
                indent(sb, indent).append("<xs:complexType name=\"").append(complexTypeName).append("\"").append(mixed).append(">\n");
                indent += 2;
                if (extensionBase != null) {
                    indent(sb, indent).append("<xs:complexContent>\n");
                    indent += 2;
                    indent(sb, indent).append("<xs:extension base=\"").append(extensionBase).append("\">\n");
                    indent += 2;
                } else {
                    indent(sb, indent).append("<xs:sequence><xs:any minOccurs=\"0\" maxOccurs=\"unbounded\" processContents=\"lax\"/></xs:sequence>");
                    indent(sb, indent).append("<xs:attribute name=\"layout-constraint\" type=\"xs:string\"/>\n");
                    indent(sb, indent).append("<xs:attribute name=\"layout-rows\" type=\"xs:string\"/>\n");
                    indent(sb, indent).append("<xs:attribute name=\"layout-columns\" type=\"xs:string\"/>\n");
                    indent(sb, indent).append("<xs:attribute name=\"rad-transition\" type=\"xs:string\"/>\n");
                    indent(sb, indent).append("<xs:attribute name=\"rad-leadComponent\" type=\"xs:string\"/>\n");
                    indent(sb, indent).append("<xs:attribute name=\"rad-implements\" type=\"xs:string\"/>\n");
                    indent(sb, indent).append("<xs:attribute name=\"rad-href\" type=\"xs:string\"/>\n");
                    indent(sb, indent).append("<xs:attribute name=\"rad-href-trigger\" type=\"xs:string\"/>\n");
                    indent(sb, indent).append("<xs:attribute name=\"view-model\" type=\"xs:string\"/>\n");
                    indent(sb, indent).append("<xs:attribute name=\"view-controller\" type=\"xs:string\"/>\n");
                    indent(sb, indent).append("<xs:attribute name=\"rad-extends\" type=\"xs:string\"/>\n");
                    indent(sb, indent).append("<xs:attribute name=\"rad-model\" type=\"xs:string\"/>\n");
                    indent(sb, indent).append("<xs:attribute name=\"rad-var\" type=\"xs:string\"/>\n");
                    indent(sb, indent).append("<xs:attribute name=\"rad-property\" type=\"xs:string\"/>\n");
                    indent(sb, indent).append("<xs:attribute name=\"rad-condition\" type=\"xs:string\"/>\n");
                }
            }
            if (clazz.getQualifiedName().contentEquals("com.codename1.ui.Component")) {
                TypeElement componentBinder = processingEnvironment.getElementUtils().getTypeElement("com.codename1.rad.ui.builders.ComponentBinder");
                for (Element member : processingEnvironment.getElementUtils().getAllMembers(componentBinder)) {
                    if (member.getKind() == ElementKind.METHOD && member.getSimpleName().toString().startsWith("bind")) {
                        String propertyName = toCamelCase(member.getSimpleName().toString().substring(4));
                        indent(sb, indent).append("<xs:attribute name=\"bind-").append(propertyName).append("\" type=\"xs:string\"/>\n");
                    }
                }
            }
            for (Element member : processingEnvironment.getElementUtils().getAllMembers(clazz)) {
                if (extensionBase != null && parentMembers.contains(member))
                    continue;
                if (member.getKind() == ElementKind.METHOD) {
                    ExecutableElement methodEl = (ExecutableElement) member;
                    if (methodEl.getParameters().size() == 1) {
                        // Could be a setter
                        String methodName = methodEl.getSimpleName().toString();
                        String propertyName = methodName;
                        if (clazz == javaClass && !methodName.startsWith("set")) {
                            continue;
                        }
                        if (clazz == builderClass && !methodName.startsWith("set")) {
                            ExecutableType methodType = (ExecutableType) processingEnvironment.getTypeUtils().asMemberOf((DeclaredType) builderClass.asType(), methodEl);
                            if (!env.isA(methodType.getReturnType(), "com.codename1.rad.ui.ComponentBuilder")) {
                                // a builder style method that returns the builder for chaining.
                                continue;
                            }
                        }
                        if (methodName.startsWith("set")) {
                            propertyName = propertyName.substring(3);
                        }
                        if (propertyName.isEmpty())
                            continue;
                        propertyName = toCamelCase(propertyName);
                        if (attributeNames.contains(propertyName.toLowerCase()))
                            continue;
                        attributeNames.add(propertyName.toLowerCase());
                        TypeMirror paramTypeMirror = methodEl.getParameters().get(0).asType();
                        List<String> enumValues = null;
                        TypeElement parameterType = null;
                        if (paramTypeMirror.getKind() == TypeKind.DECLARED) {
                            parameterType = (TypeElement) ((DeclaredType) paramTypeMirror).asElement();
                            enumValues = parameterType.getEnclosedElements().stream().filter(element -> element.getKind().equals(ElementKind.ENUM_CONSTANT)).map(Object::toString).collect(Collectors.toList());
                        }
                        String type = "xs:string";
                        if (enumValues != null && !enumValues.isEmpty()) {
                            type = parameterType.getQualifiedName().toString().replace('.', '_');
                            enumTypes.add(parameterType);
                        }
                        indent(sb, indent).append("<xs:attribute name=\"").append(propertyName).append("\" type=\"").append(type).append("\"/>\n");
                        if (clazz == javaClass) {
                            indent(sb, indent).append("<xs:attribute name=\"").append("bind-" + propertyName).append("\" type=\"xs:string\"/>\n");
                        }
                    } else if (clazz == javaClass && methodEl.getParameters().size() == 0 && methodEl.getSimpleName().toString().startsWith("get")) {
                        boolean useAttributeGroups = true;
                        ExecutableType methodType = (ExecutableType) processingEnvironment.getTypeUtils().asMemberOf((DeclaredType) clazz.asType(), methodEl);
                        String propertyName = toCamelCase(methodEl.getSimpleName().toString().substring(3));
                        if (methodType != null && methodType.getReturnType() != null) {
                            if (env.isA(methodType.getReturnType(), "com.codename1.ui.plaf.Style") || methodEl.getSimpleName().contentEquals("getComponentForm") || methodEl.getSimpleName().contentEquals("getParent") || env.isA(methodType.getReturnType(), "com.codename1.rad.nodes.ActionNode.Builder") || (methodEl.getAnnotation(RADDoc.class) != null && methodEl.getAnnotation(RADDoc.class).generateSubattributeHints() && methodType.getReturnType().getKind() == TypeKind.DECLARED)) {
                                TypeMirror retTypeMirror = methodType.getReturnType();
                                if (retTypeMirror.getKind() == TypeKind.DECLARED) {
                                    // processingEnvironment.getElementUtils().getTypeElement("com.codename1.ui.plaf.Style");
                                    TypeElement retType = (TypeElement) ((DeclaredType) retTypeMirror).asElement();
                                    if (useAttributeGroups) {
                                        indent(sb, indent).append("<xs:attributeGroup ref=\"").append(getAttributeGroupName((DeclaredType) retTypeMirror, propertyName + ".", 1)).append("\" />\n");
                                        addRequiredAttributeGroup(new AttributeGroup(propertyName + ".", retType.getQualifiedName().toString(), 1));
                                    } else {
                                        for (Element subMember : processingEnvironment.getElementUtils().getAllMembers(retType)) {
                                            String subMethodName = subMember.getSimpleName().toString();
                                            if (subMember.getKind() != ElementKind.METHOD)
                                                continue;
                                            if (!subMethodName.startsWith("set"))
                                                continue;
                                            if (((ExecutableElement) subMember).getParameters().size() != 1)
                                                continue;
                                            List<String> enumValues = null;
                                            TypeElement parameterType = null;
                                            TypeMirror parameterTypeMirror = ((ExecutableElement) subMember).getParameters().get(0).asType();
                                            if (parameterTypeMirror.getKind() == TypeKind.DECLARED) {
                                                parameterType = (TypeElement) ((DeclaredType) parameterTypeMirror).asElement();
                                                enumValues = parameterType.getEnclosedElements().stream().filter(element -> element.getKind().equals(ElementKind.ENUM_CONSTANT)).map(Object::toString).collect(Collectors.toList());
                                            }
                                            String type = "xs:string";
                                            if (enumValues != null && !enumValues.isEmpty()) {
                                                type = parameterType.toString().replace('.', '_');
                                                enumTypes.add(parameterType);
                                            }
                                            indent(sb, indent).append("<xs:attribute name=\"").append(propertyName).append(".").append(toCamelCase(subMethodName.toString().substring(3))).append("\" type=\"").append(type).append("\"/>\n");
                                            indent(sb, indent).append("<xs:attribute name=\"bind-").append(propertyName).append(".").append(toCamelCase(subMethodName.toString().substring(3))).append("\" type=\"xs:string\"/>\n");
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            if (clazz == builderClass || extensionBase != null) {
                indent -= 2;
                indent(sb, indent).append("</xs:extension>\n");
                indent -= 2;
                indent(sb, indent).append("</xs:complexContent>\n");
            }
            indent -= 2;
            indent(sb, indent).append("</xs:complexType>\n");
        }
        for (XMLSchemaGenerator subGenerator : subGenerators) {
            subGenerator.writeSchema(sb, false);
        }
    }
    if (writeElements) {
        indent(sb, indent).append("<xs:element name=\"script\" type=\"xs:string\"/>\n");
        indent(sb, indent).append("<xs:element name=\"import\" type=\"xs:string\"/>\n");
        indent(sb, indent).append("<xs:element name=\"view-model\">\n");
        indent(sb, indent).append("  <xs:complexType>\n");
        indent(sb, indent).append("    <xs:sequence>\n");
        indent(sb, indent).append("      <xs:element ref=\"define-property\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n");
        indent(sb, indent).append("    </xs:sequence>\n");
        indent(sb, indent).append("    <xs:attribute name=\"extends\" type=\"xs:string\"/>\n");
        indent(sb, indent).append("    <xs:attribute name=\"implements\" type=\"xs:string\"/>\n");
        indent(sb, indent).append("  </xs:complexType>\n");
        indent(sb, indent).append("</xs:element>\n");
        indent(sb, indent).append("<xs:element name=\"form-controller\">\n");
        indent(sb, indent).append("  <xs:complexType>\n");
        indent(sb, indent).append("    <xs:attribute name=\"extends\" type=\"xs:string\"/>\n");
        indent(sb, indent).append("    <xs:attribute name=\"implements\" type=\"xs:string\"/>\n");
        indent(sb, indent).append("  </xs:complexType>\n");
        indent(sb, indent).append("</xs:element>\n");
        indent(sb, indent).append("<xs:element name=\"view-controller\">\n");
        indent(sb, indent).append("  <xs:complexType>\n");
        indent(sb, indent).append("    <xs:attribute name=\"extends\" type=\"xs:string\"/>\n");
        indent(sb, indent).append("  </xs:complexType>\n");
        indent(sb, indent).append("</xs:element>\n");
        indent(sb, indent).append("<xs:element name=\"bind-action\">\n");
        indent(sb, indent).append("  <xs:complexType>\n");
        indent(sb, indent).append("    <xs:attribute name=\"category\" type=\"xs:string\"/>\n");
        indent(sb, indent).append("    <xs:attribute name=\"inherit\" type=\"xs:boolean\"/>\n");
        indent(sb, indent).append("    <xs:attribute name=\"on\" type=\"xs:string\"/>\n");
        indent(sb, indent).append("  </xs:complexType>\n");
        indent(sb, indent).append("</xs:element>\n");
        indent(sb, indent).append("<xs:element name=\"define-tag\">\n");
        indent(sb, indent).append("  <xs:complexType>\n");
        indent(sb, indent).append("    <xs:attribute name=\"name\" type=\"xs:string\"/>\n");
        indent(sb, indent).append("    <xs:attribute name=\"value\" type=\"xs:string\"/>\n");
        indent(sb, indent).append("    <xs:attribute name=\"type\" type=\"xs:string\"/>\n");
        indent(sb, indent).append("    <xs:attribute name=\"initialValue\" type=\"xs:string\"/>\n");
        indent(sb, indent).append("  </xs:complexType>\n");
        indent(sb, indent).append("</xs:element>\n");
        indent(sb, indent).append("<xs:element name=\"use-taglib\">\n");
        indent(sb, indent).append("  <xs:complexType>\n");
        indent(sb, indent).append("    <xs:attribute name=\"package\" type=\"xs:string\"/>\n");
        indent(sb, indent).append("    <xs:attribute name=\"class\" type=\"xs:string\"/>\n");
        indent(sb, indent).append("  </xs:complexType>\n");
        indent(sb, indent).append("</xs:element>\n");
        indent(sb, indent).append("<xs:element name=\"define-property\">\n");
        indent(sb, indent).append("  <xs:complexType>\n");
        indent(sb, indent).append("    <xs:attribute name=\"name\" type=\"xs:string\"/>\n");
        indent(sb, indent).append("    <xs:attribute name=\"type\" type=\"xs:string\"/>\n");
        indent(sb, indent).append("    <xs:attribute name=\"initialValue\" type=\"xs:string\"/>\n");
        indent(sb, indent).append("  </xs:complexType>\n");
        indent(sb, indent).append("</xs:element>\n");
        indent(sb, indent).append("<xs:element name=\"define-category\">\n");
        indent(sb, indent).append("  <xs:complexType>\n");
        indent(sb, indent).append("    <xs:attribute name=\"name\" type=\"xs:string\"/>\n");
        indent(sb, indent).append("    <xs:attribute name=\"value\" type=\"xs:string\"/>\n");
        indent(sb, indent).append("  </xs:complexType>\n");
        indent(sb, indent).append("</xs:element>\n");
        indent(sb, indent).append("<xs:element name=\"var\">\n");
        indent(sb, indent).append("  <xs:complexType>\n");
        indent(sb, indent).append("    <xs:attribute name=\"value\" type=\"xs:string\"/>\n");
        indent(sb, indent).append("    <xs:attribute name=\"lookup\" type=\"xs:string\"/>\n");
        indent(sb, indent).append("    <xs:attribute name=\"name\" type=\"xs:string\"/>\n");
        indent(sb, indent).append("    <xs:attribute name=\"type\" type=\"xs:string\"/>\n");
        indent(sb, indent).append("  </xs:complexType>\n");
        indent(sb, indent).append("</xs:element>\n");
        indent(sb, indent).append("<xs:element name=\"define-slot\">\n");
        indent(sb, indent).append("  <xs:complexType>\n");
        indent(sb, indent).append("    <xs:sequence>\n");
        indent(sb, indent).append("      <xs:any minOccurs=\"0\" maxOccurs=\"1\" />\n");
        indent(sb, indent).append("    </xs:sequence>\n");
        indent(sb, indent).append("    <xs:attribute name=\"id\" type=\"xs:string\"/>\n");
        indent(sb, indent).append("  </xs:complexType>\n");
        indent(sb, indent).append("</xs:element>\n");
        indent(sb, indent).append("<xs:element name=\"fill-slot\">\n");
        indent(sb, indent).append("  <xs:complexType>\n");
        indent(sb, indent).append("    <xs:sequence>\n");
        indent(sb, indent).append("      <xs:any minOccurs=\"0\" maxOccurs=\"1\"/>\n");
        indent(sb, indent).append("    </xs:sequence>\n");
        indent(sb, indent).append("    <xs:attribute name=\"id\" type=\"xs:string\"/>\n");
        indent(sb, indent).append("  </xs:complexType>\n");
        indent(sb, indent).append("</xs:element>\n");
        indent(sb, indent).append("<xs:element name=\"row-template\">\n");
        indent(sb, indent).append("  <xs:complexType>\n");
        indent(sb, indent).append("    <xs:sequence>\n");
        indent(sb, indent).append("      <xs:any minOccurs=\"0\" maxOccurs=\"1\"/>\n");
        indent(sb, indent).append("    </xs:sequence>\n");
        indent(sb, indent).append("    <xs:attribute name=\"case\" type=\"xs:string\"/>\n");
        indent(sb, indent).append("  </xs:complexType>\n");
        indent(sb, indent).append("</xs:element>\n");
        for (Map.Entry<String, TypeElement> e : allTags.entrySet()) {
            if (e.getValue().getModifiers().contains(Modifier.PUBLIC) && !e.getValue().getModifiers().contains(Modifier.ABSTRACT)) {
                indent(sb, indent).append("<xs:element name=\"").append(e.getKey()).append("\" type=\"").append(e.getValue().getQualifiedName().toString().replace('.', '_')).append("-impl\"/>\n");
            }
        }
    }
    if (writeElements) {
        indent -= 2;
        indent(sb, indent).append("</xs:schema>\n");
    } else {
        boolean includeHeadmatter = !requiredAttributeGroups.isEmpty() || !enumTypes.isEmpty();
        StringBuilder headMatter = includeHeadmatter ? new StringBuilder() : null;
        if (includeHeadmatter) {
            headMatter.append("====\n");
        }
        if (!requiredAttributeGroups.isEmpty()) {
            HashSet<AttributeGroup> currentRound = new HashSet<>(requiredAttributeGroups);
            while (!currentRound.isEmpty()) {
                for (AttributeGroup group : currentRound) {
                    headMatter.append("requireAttributeGroup ").append(group.prefix).append(":").append(group.type).append(":").append(group.depth).append("\n");
                    File attGroupFile = getAttributeGroupFile(group);
                    if (!attGroupFile.exists()) {
                        StringBuilder attGroupContent = new StringBuilder();
                        writeAttributeGroup(attGroupContent, (DeclaredType) env.lookupClass(group.type).asType(), group.prefix, group.depth);
                        attGroupFile.getParentFile().mkdirs();
                        try (FileOutputStream fos = new FileOutputStream(attGroupFile)) {
                            fos.write(attGroupContent.toString().getBytes("UTF-8"));
                        }
                    }
                    writtenAttributeGroups.add(group);
                }
                currentRound.clear();
                currentRound.addAll(requiredAttributeGroups);
                currentRound.removeAll(writtenAttributeGroups);
            }
        }
        if (!enumTypes.isEmpty()) {
            for (TypeElement enumType : enumTypes) {
                headMatter.append("require ").append(enumType.getQualifiedName()).append("\n");
                File enumSchemaFile = getClassSchemaFile(enumType);
                if (!enumSchemaFile.exists()) {
                    enumSchemaFile.getParentFile().mkdirs();
                    StringBuilder enumSchemaContent = new StringBuilder();
                    writeEnumType(enumSchemaContent, enumType);
                    try (FileOutputStream fos = new FileOutputStream(enumSchemaFile)) {
                        fos.write(enumSchemaContent.toString().getBytes("UTF-8"));
                    }
                }
            }
        }
        if (includeHeadmatter) {
            headMatter.append("====\n");
            sb.insert(0, headMatter);
        }
    }
    return sb;
}
Also used : ExecutableType(javax.lang.model.type.ExecutableType) java.util(java.util) ExecutableType(javax.lang.model.type.ExecutableType) RADDoc(com.codename1.rad.annotations.RADDoc) FileOutputStream(java.io.FileOutputStream) IOException(java.io.IOException) FileInputStream(java.io.FileInputStream) Collectors(java.util.stream.Collectors) File(java.io.File) TypeKind(javax.lang.model.type.TypeKind) RAD(com.codename1.rad.annotations.RAD) TypeMirror(javax.lang.model.type.TypeMirror) DeclaredType(javax.lang.model.type.DeclaredType) ProcessingEnvironment(javax.annotation.processing.ProcessingEnvironment) javax.lang.model.element(javax.lang.model.element) TypeMirror(javax.lang.model.type.TypeMirror) IOException(java.io.IOException) FileInputStream(java.io.FileInputStream) FileOutputStream(java.io.FileOutputStream) File(java.io.File) DeclaredType(javax.lang.model.type.DeclaredType)

Example 20 with Category

use of com.codename1.rad.nodes.ActionNode.Category in project CodeRAD by shannah.

the class ResultParserTest method testResultJSON.

private void testResultJSON() throws Exception {
    String json = "{\"name\":\"Paul\", \"email\":\"paul@example.com\", \"dob\":\"December 27, 1978\" " + ", \"children\": [{\"name\":\"Jim\", \"email\":\"jim@example.com\", \"dob\":\"January 10, 1979\"}," + "{\"name\"=\"Jill\", \"email\"=\"jill@example.com\", \"dob\":\"January 11, 1979\"}]}";
    Result r = Result.fromContent(json, Result.JSON);
    assertEqual("Paul", r.get("name"));
    assertEqual("Paul", r.getAsString("name"));
    assertEqual("Paul", r.get("name"));
    assertEqual("Jim", r.get("./children[0]/name"));
    assertEqual("Jim", r.get("children[0]/name"));
    assertNull(r.get("./children/person[0]/name"));
    assertNull(r.getAsString("./children/person/name"));
    assertEqual("Jim", r.getAsString("./children[0]/name"));
    assertEqual(2, r.getAsStringArray("./children/name").length);
    assertArrayEqual(new String[] { "Jim", "Jill" }, r.getAsStringArray("./children/name"));
    assertEqual("Jim", r.get("./children/name"));
    assertNull(r.getAsString("children/person/name"));
    assertNull(r.getAsString("children[0]/person/name"));
    assertEqual(0, r.getAsStringArray("children/person/name").length);
    json = "{\"numbers\" : [1, 2, 3, 4]}";
    r = Result.fromContent(json, Result.JSON);
    assertEqual(1, r.getAsInteger("numbers[0]"));
    String jsonData = "{\n" + "  \"colors\": [\n" + "    {\n" + "      \"color\": \"black\",\n" + "      \"category\": \"hue\",\n" + "      \"type\": \"primary\",\n" + "      \"code\": {\n" + "        \"rgba\": [255,255,255,1],\n" + "        \"hex\": \"#000\"\n" + "      }\n" + "    },\n" + "    {\n" + "      \"color\": \"white\",\n" + "      \"category\": \"value\",\n" + "      \"code\": {\n" + "        \"rgba\": [0,0,0,1],\n" + "        \"hex\": \"#FFF\"\n" + "      }\n" + "    },\n" + "    {\n" + "      \"color\": \"red\",\n" + "      \"category\": \"hue\",\n" + "      \"type\": \"primary\",\n" + "      \"code\": {\n" + "        \"rgba\": [255,0,0,1],\n" + "        \"hex\": \"#FF0\"\n" + "      }\n" + "    },\n" + "    {\n" + "      \"color\": \"blue\",\n" + "      \"category\": \"hue\",\n" + "      \"type\": \"primary\",\n" + "      \"code\": {\n" + "        \"rgba\": [0,0,255,1],\n" + "        \"hex\": \"#00F\"\n" + "      }\n" + "    },\n" + "    {\n" + "      \"color\": \"yellow\",\n" + "      \"category\": \"hue\",\n" + "      \"type\": \"primary\",\n" + "      \"code\": {\n" + "        \"rgba\": [255,255,0,1],\n" + "        \"hex\": \"#FF0\"\n" + "      }\n" + "    },\n" + "    {\n" + "      \"color\": \"green\",\n" + "      \"category\": \"hue\",\n" + "      \"type\": \"secondary\",\n" + "      \"code\": {\n" + "        \"rgba\": [0,255,0,1],\n" + "        \"hex\": \"#0F0\"\n" + "      }\n" + "    },\n" + "  ]\n" + "}";
    r = Result.fromContent(jsonData, Result.JSON);
    assertEqual("black", r.getAsString("colors[0]/color"));
    assertEqual(255, r.getAsInteger("colors[0]/code/rgba[0]"));
}
Also used : Result(com.codename1.rad.processing.Result)

Aggregations

IOException (java.io.IOException)8 Paint (android.graphics.Paint)5 PushAction (com.codename1.push.PushAction)4 PushActionCategory (com.codename1.push.PushActionCategory)4 FileInputStream (java.io.FileInputStream)4 InputStream (java.io.InputStream)4 NameNotFoundException (android.content.pm.PackageManager.NameNotFoundException)3 RemoteException (android.os.RemoteException)3 BufferedInputStream (com.codename1.io.BufferedInputStream)3 MediaException (com.codename1.media.AsyncMedia.MediaException)3 Result (com.codename1.rad.processing.Result)3 Element (com.codename1.xml.Element)3 InvocationTargetException (java.lang.reflect.InvocationTargetException)3 URISyntaxException (java.net.URISyntaxException)3 ParseException (java.text.ParseException)3 ParserConfigurationException (javax.xml.parsers.ParserConfigurationException)3 JSONException (org.json.JSONException)3 SAXException (org.xml.sax.SAXException)3 Element (android.renderscript.Element)2 ConnectionRequest (com.codename1.io.ConnectionRequest)2