Search in sources :

Example 36 with Schema

use of com.reprezen.kaizen.oasparser.model3.Schema in project odata-client by davidmoten.

the class Generator method writeEntityRequest.

private void writeEntityRequest(Schema schema, TEntityType entityType, Map<String, List<Action>> typeActions, Map<String, List<Function>> typeFunctions) {
    EntityType t = new EntityType(entityType, names);
    names.getDirectoryEntityRequest(schema).mkdirs();
    // TODO only write out those requests needed
    String simpleClassName = t.getSimpleClassNameEntityRequest();
    Imports imports = new Imports(t.getFullClassNameEntityRequest());
    Indent indent = new Indent();
    StringWriter w = new StringWriter();
    try (PrintWriter p = new PrintWriter(w)) {
        p.format("package %s;\n\n", t.getPackageEntityRequest());
        p.format(IMPORTSHERE);
        p.format("@%s\n", imports.add(JsonIgnoreType.class));
        // don't make class final because can get extended by EntitySet
        p.format("public class %s extends %s {\n\n", simpleClassName, imports.add(EntityRequest.class) + "<" + imports.add(t.getFullClassNameEntity()) + ">");
        indent.right();
        // add constructor
        // 
        p.format(// 
        "%spublic %s(%s contextPath, %s<%s> value) {\n", // 
        indent, // 
        simpleClassName, // 
        imports.add(ContextPath.class), imports.add(Optional.class), imports.add(Object.class));
        // 
        p.format(// 
        "%ssuper(%s.class, contextPath, value, %s);\n", // 
        indent.right(), // 
        imports.add(t.getFullClassNameEntity()), t.isMediaEntityOrHasStreamProperty());
        p.format("%s}\n", indent.left());
        indent.left();
        if (t.hasStream()) {
            p.format("\n%s/**\n", indent);
            p.format("%s * If returning a stream without using object metadata is not supported then", indent);
            p.format("%s * returns {@code Optional.empty()}. Otherwise, returns a stream provider\n", indent);
            p.format("%s * where the location of the stream is assumed to be the current path + {@code /$value}.\n", indent);
            p.format("%s *\n", indent);
            p.format("%s * @return StreamProvider if suitable metadata found otherwise returns\n", indent);
            p.format("%s *         {@code Optional.empty()}\n", indent);
            p.format("%s */\n", indent);
            p.format("%s@%s\n", indent, imports.add(JsonIgnore.class));
            p.format("%spublic %s<%s> getStreamCurrentPath() {\n", indent, imports.add(Optional.class), imports.add(StreamProvider.class));
            p.format("%sreturn %s.createStream(contextPath, null);\n", indent.right(), imports.add(RequestHelper.class));
            p.format("%s}\n", indent.left());
        }
        // TODO also support navigation properties with complexTypes?
        // 
        t.getNavigationProperties().stream().filter(x -> {
            boolean isEntity = names.isEntityWithNamespace(names.getInnerType(names.getType(x)));
            if (!isEntity) {
                log("Unexpected entity with non-entity navigation property type: " + simpleClassName + "." + x.getName() + ". If you get this message then raise an issue on the github project for odata-client.");
            }
            return isEntity;
        }).forEach(x -> {
            indent.right();
            final String returnClass;
            String y = x.getType().get(0);
            Schema sch = names.getSchema(names.getInnerType(y));
            if (Names.isCollection(y)) {
                returnClass = toClassName(x, imports);
            } else {
                returnClass = imports.add(names.getFullClassNameEntityRequestFromTypeWithNamespace(sch, y));
            }
            // if collection then add with id method (if has ids)
            if (Names.isCollection(y)) {
                // TODO use actual key name from metadata
                String inner = names.getInnerType(y);
                // TODO remove redundant check
                if (names.isEntityWithNamespace(inner)) {
                    String entityRequestType = names.getFullClassNameEntityRequestFromTypeWithNamespace(sch, inner);
                    EntityType et = names.getEntityType(inner);
                    KeyInfo k = getKeyInfo(et, imports);
                    if (!k.isEmpty()) {
                        p.format("\n%spublic %s %s(%s) {\n", indent, imports.add(entityRequestType), Names.getIdentifier(x.getName()), k.typedParams);
                        p.format("%sreturn new %s(contextPath.addSegment(\"%s\")%s, %s.empty());\n", indent.right(), imports.add(entityRequestType), x.getName(), k.addKeys, imports.add(Optional.class));
                        p.format("%s}\n", indent.left());
                    }
                }
            }
            // 
            p.format(// 
            "\n%spublic %s %s() {\n", // 
            indent, // 
            returnClass, Names.getGetterMethodWithoutGet(x.getName()));
            if (isCollection(x)) {
                p.format("%sreturn new %s(\n", indent.right(), toClassName(x, imports));
                p.format("%scontextPath.addSegment(\"%s\"), %s.empty());\n", indent.right().right().right().right(), x.getName(), imports.add(Optional.class));
                indent.left().left().left().left();
            } else {
                p.format("%sreturn new %s(contextPath.addSegment(\"%s\"), %s.empty());\n", indent.right(), returnClass, x.getName(), imports.add(Optional.class));
            }
            p.format("%s}\n", indent.left());
            indent.left();
        });
        indent.right();
        Set<String> methodNames = new HashSet<>();
        writeBoundActionMethods(t, typeActions, imports, indent, p, methodNames);
        writeBoundFunctionMethods(t, typeFunctions, imports, indent, p, methodNames);
        indent.left();
        p.format("\n}\n");
        writeToFile(imports, w, t.getClassFileEntityRequest());
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}
Also used : JsonProperty(com.fasterxml.jackson.annotation.JsonProperty) StreamProvider(com.github.davidmoten.odata.client.StreamProvider) Arrays(java.util.Arrays) HasNameJavaHasNullable(com.github.davidmoten.odata.client.generator.model.HasNameJavaHasNullable) HasContext(com.github.davidmoten.odata.client.HasContext) HttpService(com.github.davidmoten.odata.client.HttpService) TEnumType(org.oasisopen.odata.csdl.v4.TEnumType) Map(java.util.Map) Parameter(com.github.davidmoten.odata.client.generator.model.Action.Parameter) PrintWriter(java.io.PrintWriter) FunctionRequestReturningNonCollection(com.github.davidmoten.odata.client.FunctionRequestReturningNonCollection) SchemaAndType(com.github.davidmoten.odata.client.generator.Names.SchemaAndType) JacksonInject(com.fasterxml.jackson.annotation.JacksonInject) TEntitySet(org.oasisopen.odata.csdl.v4.TEntitySet) NameValue(com.github.davidmoten.odata.client.NameValue) RequestHelper(com.github.davidmoten.odata.client.internal.RequestHelper) Set(java.util.Set) ODataType(com.github.davidmoten.odata.client.ODataType) StandardCharsets(java.nio.charset.StandardCharsets) UncheckedIOException(java.io.UncheckedIOException) Stream(java.util.stream.Stream) Lists(com.github.davidmoten.guavamini.Lists) CollectionPageEntityRequest(com.github.davidmoten.odata.client.CollectionPageEntityRequest) ArrayList(java.util.ArrayList) LinkedHashMap(java.util.LinkedHashMap) SchemaInfo(com.github.davidmoten.odata.client.SchemaInfo) TProperty(org.oasisopen.odata.csdl.v4.TProperty) Checks(com.github.davidmoten.odata.client.internal.Checks) Files(java.nio.file.Files) TNavigationProperty(org.oasisopen.odata.csdl.v4.TNavigationProperty) Function(com.github.davidmoten.odata.client.generator.model.Function) StringWriter(java.io.StringWriter) TSingleton(org.oasisopen.odata.csdl.v4.TSingleton) HttpMethod(com.github.davidmoten.odata.client.HttpMethod) IOException(java.io.IOException) Include(com.fasterxml.jackson.annotation.JsonInclude.Include) ContainerBuilder(com.github.davidmoten.odata.client.TestingService.ContainerBuilder) File(java.io.File) ChangedFields(com.github.davidmoten.odata.client.internal.ChangedFields) NavigationProperty(com.github.davidmoten.odata.client.annotation.NavigationProperty) TNavigationPropertyBinding(org.oasisopen.odata.csdl.v4.TNavigationPropertyBinding) RequestOptions(com.github.davidmoten.odata.client.RequestOptions) ParameterMap(com.github.davidmoten.odata.client.internal.ParameterMap) TEnumTypeMember(org.oasisopen.odata.csdl.v4.TEnumTypeMember) HttpRequestOptions(com.github.davidmoten.odata.client.HttpRequestOptions) CollectionPage(com.github.davidmoten.odata.client.CollectionPage) FieldName(com.github.davidmoten.odata.client.generator.model.Structure.FieldName) ActionRequestNoReturn(com.github.davidmoten.odata.client.ActionRequestNoReturn) Action(com.github.davidmoten.odata.client.generator.model.Action) Field(com.github.davidmoten.odata.client.generator.model.Field) UploadStrategy(com.github.davidmoten.odata.client.UploadStrategy) TComplexType(org.oasisopen.odata.csdl.v4.TComplexType) JsonAnyGetter(com.fasterxml.jackson.annotation.JsonAnyGetter) ActionRequestReturningNonCollection(com.github.davidmoten.odata.client.ActionRequestReturningNonCollection) ReturnType(com.github.davidmoten.odata.client.generator.model.Action.ReturnType) UnmappedFields(com.github.davidmoten.odata.client.UnmappedFields) Collectors(java.util.stream.Collectors) EntityType(com.github.davidmoten.odata.client.generator.model.EntityType) JsonAnySetter(com.fasterxml.jackson.annotation.JsonAnySetter) Context(com.github.davidmoten.odata.client.Context) List(java.util.List) KeyElement(com.github.davidmoten.odata.client.generator.model.KeyElement) Method(com.github.davidmoten.odata.client.generator.model.Method) PropertyRef(com.github.davidmoten.odata.client.generator.model.PropertyRef) Structure(com.github.davidmoten.odata.client.generator.model.Structure) StreamUploaderChunked(com.github.davidmoten.odata.client.StreamUploaderChunked) Optional(java.util.Optional) ClientException(com.github.davidmoten.odata.client.ClientException) ContextPath(com.github.davidmoten.odata.client.ContextPath) JsonPropertyOrder(com.fasterxml.jackson.annotation.JsonPropertyOrder) ComplexType(com.github.davidmoten.odata.client.generator.model.ComplexType) Preconditions(com.github.davidmoten.guavamini.Preconditions) TypedObject(com.github.davidmoten.odata.client.internal.TypedObject) HashMap(java.util.HashMap) TActionFunctionParameter(org.oasisopen.odata.csdl.v4.TActionFunctionParameter) HashSet(java.util.HashSet) TActionFunctionReturnType(org.oasisopen.odata.csdl.v4.TActionFunctionReturnType) TFunction(org.oasisopen.odata.csdl.v4.TFunction) EntityRequest(com.github.davidmoten.odata.client.EntityRequest) JsonIgnore(com.fasterxml.jackson.annotation.JsonIgnore) TAction(org.oasisopen.odata.csdl.v4.TAction) Path(com.github.davidmoten.odata.client.Path) Schema(org.oasisopen.odata.csdl.v4.Schema) StreamUploaderSingleCall(com.github.davidmoten.odata.client.StreamUploaderSingleCall) EntitySet(com.github.davidmoten.odata.client.generator.model.EntitySet) ODataEntityType(com.github.davidmoten.odata.client.ODataEntityType) BuilderBase(com.github.davidmoten.odata.client.TestingService.BuilderBase) ActionRequestReturningNonCollectionUnwrapped(com.github.davidmoten.odata.client.ActionRequestReturningNonCollectionUnwrapped) TEntityContainer(org.oasisopen.odata.csdl.v4.TEntityContainer) UnmappedFieldsImpl(com.github.davidmoten.odata.client.internal.UnmappedFieldsImpl) StreamUploader(com.github.davidmoten.odata.client.StreamUploader) JsonInclude(com.fasterxml.jackson.annotation.JsonInclude) FunctionRequestReturningStream(com.github.davidmoten.odata.client.FunctionRequestReturningStream) JsonIgnoreType(com.fasterxml.jackson.annotation.JsonIgnoreType) CollectionPageNonEntityRequest(com.github.davidmoten.odata.client.CollectionPageNonEntityRequest) FunctionRequestReturningNonCollectionUnwrapped(com.github.davidmoten.odata.client.FunctionRequestReturningNonCollectionUnwrapped) Property(com.github.davidmoten.odata.client.annotation.Property) Collections(java.util.Collections) TEntityType(org.oasisopen.odata.csdl.v4.TEntityType) StreamProvider(com.github.davidmoten.odata.client.StreamProvider) JsonIgnore(com.fasterxml.jackson.annotation.JsonIgnore) Optional(java.util.Optional) JsonIgnoreType(com.fasterxml.jackson.annotation.JsonIgnoreType) Schema(org.oasisopen.odata.csdl.v4.Schema) UncheckedIOException(java.io.UncheckedIOException) IOException(java.io.IOException) EntityType(com.github.davidmoten.odata.client.generator.model.EntityType) ODataEntityType(com.github.davidmoten.odata.client.ODataEntityType) TEntityType(org.oasisopen.odata.csdl.v4.TEntityType) ContextPath(com.github.davidmoten.odata.client.ContextPath) StringWriter(java.io.StringWriter) RequestHelper(com.github.davidmoten.odata.client.internal.RequestHelper) TypedObject(com.github.davidmoten.odata.client.internal.TypedObject) PrintWriter(java.io.PrintWriter) HashSet(java.util.HashSet)

Example 37 with Schema

use of com.reprezen.kaizen.oasparser.model3.Schema in project odata-client by davidmoten.

the class Generator method toClassName.

private String toClassName(TNavigationProperty x, Imports imports) {
    Preconditions.checkArgument(x.getType().size() == 1);
    String t = x.getType().get(0);
    if (!isCollection(x)) {
        if (x.isNullable() != null && x.isNullable()) {
            String r = names.toImportedFullClassName(t, imports, List.class);
            return imports.add(Optional.class) + "<" + r + ">";
        } else {
            // is navigation property so must be an entity and is a single request
            Schema sch = names.getSchema(names.getInnerType(t));
            return imports.add(names.getFullClassNameEntityRequestFromTypeWithNamespace(sch, t));
        }
    } else {
        String inner = names.getInnerType(t);
        Schema schema = names.getSchema(inner);
        return imports.add(names.getFullClassNameCollectionRequestFromTypeWithNamespace(schema, inner));
    }
}
Also used : Optional(java.util.Optional) Schema(org.oasisopen.odata.csdl.v4.Schema)

Example 38 with Schema

use of com.reprezen.kaizen.oasparser.model3.Schema in project odata-client by davidmoten.

the class Util method replaceAlias.

private static void replaceAlias(Schema schema, Object x) {
    if (schema.getAlias() == null) {
        return;
    }
    if (x instanceof TEntityType) {
        TEntityType p = (TEntityType) x;
        // mutate types to use alias
        p.setBaseType(replaceAlias(schema, p.getBaseType()));
        // 
        p.getKeyOrPropertyOrNavigationProperty().forEach(y -> replaceAlias(schema, y));
    } else if (x instanceof TComplexType) {
        TComplexType p = (TComplexType) x;
        // mutate types to use alias
        p.setBaseType(replaceAlias(schema, p.getBaseType()));
        // 
        p.getPropertyOrNavigationPropertyOrAnnotation().forEach(y -> replaceAlias(schema, y));
    } else if (x instanceof TAction) {
        TAction a = (TAction) x;
        // 
        a.getParameterOrAnnotationOrReturnType().forEach(y -> replaceAlias(schema, y));
    } else if (x instanceof TFunction) {
        TFunction a = (TFunction) x;
        // 
        a.getParameterOrAnnotation().forEach(y -> replaceAlias(schema, y));
        replaceAlias(schema, a.getReturnType());
    } else if (x instanceof TActionFunctionParameter) {
        TActionFunctionParameter p = (TActionFunctionParameter) x;
        replaceAlias(schema, p.getType());
    } else if (x instanceof TActionFunctionReturnType) {
        TActionFunctionReturnType p = (TActionFunctionReturnType) x;
        replaceAlias(schema, p.getType());
    } else if (x instanceof TProperty) {
        TProperty p = (TProperty) x;
        replaceAlias(schema, p.getType());
    } else if (x instanceof TNavigationProperty) {
        TNavigationProperty p = (TNavigationProperty) x;
        replaceAlias(schema, p.getType());
    } else if (x instanceof TAnnotations) {
        TAnnotations a = (TAnnotations) x;
        a.setTarget(replaceAlias(schema, a.getTarget()));
    } else if (x instanceof TEntityContainer) {
        TEntityContainer a = (TEntityContainer) x;
        Util.filter(a.getEntitySetOrActionImportOrFunctionImport(), TEntitySet.class).forEach(y -> replaceAlias(schema, y));
    } else if (x instanceof TEntitySet) {
        TEntitySet a = (TEntitySet) x;
        a.setEntityType(replaceAlias(schema, a.getEntityType()));
    }
}
Also used : TEntitySet(org.oasisopen.odata.csdl.v4.TEntitySet) TNavigationProperty(org.oasisopen.odata.csdl.v4.TNavigationProperty) Collection(java.util.Collection) TActionFunctionParameter(org.oasisopen.odata.csdl.v4.TActionFunctionParameter) Collectors(java.util.stream.Collectors) VisibleForTesting(com.github.davidmoten.guavamini.annotations.VisibleForTesting) TEntityContainer(org.oasisopen.odata.csdl.v4.TEntityContainer) List(java.util.List) Stream(java.util.stream.Stream) TAnnotations(org.oasisopen.odata.csdl.v4.TAnnotations) TActionFunctionReturnType(org.oasisopen.odata.csdl.v4.TActionFunctionReturnType) TFunction(org.oasisopen.odata.csdl.v4.TFunction) TAction(org.oasisopen.odata.csdl.v4.TAction) TComplexType(org.oasisopen.odata.csdl.v4.TComplexType) TProperty(org.oasisopen.odata.csdl.v4.TProperty) Pattern(java.util.regex.Pattern) Schema(org.oasisopen.odata.csdl.v4.Schema) TEntityType(org.oasisopen.odata.csdl.v4.TEntityType) TAnnotations(org.oasisopen.odata.csdl.v4.TAnnotations) TFunction(org.oasisopen.odata.csdl.v4.TFunction) TAction(org.oasisopen.odata.csdl.v4.TAction) TProperty(org.oasisopen.odata.csdl.v4.TProperty) TNavigationProperty(org.oasisopen.odata.csdl.v4.TNavigationProperty) TEntityType(org.oasisopen.odata.csdl.v4.TEntityType) TComplexType(org.oasisopen.odata.csdl.v4.TComplexType) TActionFunctionParameter(org.oasisopen.odata.csdl.v4.TActionFunctionParameter) TEntityContainer(org.oasisopen.odata.csdl.v4.TEntityContainer) TActionFunctionReturnType(org.oasisopen.odata.csdl.v4.TActionFunctionReturnType) TEntitySet(org.oasisopen.odata.csdl.v4.TEntitySet)

Example 39 with Schema

use of com.reprezen.kaizen.oasparser.model3.Schema in project molgenis-emx2 by molgenis.

the class SiteMapService method getSiteMapForSchema.

public static String getSiteMapForSchema(Request request, Response response) {
    response.type("text/xml, application/xml");
    Schema schema = getSchema(request);
    final String baseUrl = request.scheme() + "://" + request.host() + "/" + schema.getName();
    return new CatalogueSiteMap(schema, baseUrl).buildSiteMap();
}
Also used : CatalogueSiteMap(org.molgenis.emx2.web.service.CatalogueSiteMap) MolgenisWebservice.getSchema(org.molgenis.emx2.web.MolgenisWebservice.getSchema) Schema(org.molgenis.emx2.Schema)

Example 40 with Schema

use of com.reprezen.kaizen.oasparser.model3.Schema in project molgenis-emx2 by molgenis.

the class ZipApi method postZip.

static String postZip(Request request, Response response) throws MolgenisException, IOException, ServletException {
    Long start = System.currentTimeMillis();
    Schema schema = getSchema(request);
    // get uploaded file
    File tempFile = File.createTempFile("temp_", ".tmp");
    try {
        request.attribute("org.eclipse.jetty.multipartConfig", new MultipartConfigElement(tempFile.getAbsolutePath()));
        try (InputStream input = request.raw().getPart("file").getInputStream()) {
            Files.copy(input, tempFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
        }
        // depending on file extension use proper importer
        String fileName = request.raw().getPart("file").getSubmittedFileName();
        if (fileName.endsWith(".zip")) {
            if (request.queryParams("async") != null) {
                String id = TaskApi.submit(new ImportCsvZipTask(tempFile.toPath(), schema, false));
                return new TaskReference(id, schema).toString();
            } else {
                MolgenisIO.fromZipFile(tempFile.toPath(), schema, false);
            }
        } else if (fileName.endsWith(".xlsx")) {
            MolgenisIO.importFromExcelFile(tempFile.toPath(), schema, false);
        } else {
            throw new IOException("File upload failed: extension " + fileName.substring(fileName.lastIndexOf('.')) + " not supported");
        }
        response.status(200);
        return "Import success in " + (System.currentTimeMillis() - start) + "ms";
    } finally {
        if (request.queryParams("async") == null) {
            Files.delete(tempFile.toPath());
        }
    }
}
Also used : MultipartConfigElement(javax.servlet.MultipartConfigElement) InputStream(java.io.InputStream) MolgenisWebservice.getSchema(org.molgenis.emx2.web.MolgenisWebservice.getSchema) Schema(org.molgenis.emx2.Schema) IOException(java.io.IOException) ImportCsvZipTask(org.molgenis.emx2.io.ImportCsvZipTask) File(java.io.File)

Aggregations

Test (org.junit.Test)57 Schema (com.google.pubsub.v1.Schema)38 Schema (org.molgenis.emx2.Schema)38 AbstractMessage (com.google.protobuf.AbstractMessage)16 ByteString (com.google.protobuf.ByteString)16 QName (javax.xml.namespace.QName)16 File (java.io.File)15 URL (java.net.URL)15 Schema (org.geosdi.geoplatform.xml.xsd.v2001.Schema)15 SchemaServiceClient (com.google.cloud.pubsub.v1.SchemaServiceClient)14 ProjectName (com.google.pubsub.v1.ProjectName)14 LayerSchemaDTO (org.geosdi.geoplatform.connector.wfs.response.LayerSchemaDTO)14 IOException (java.io.IOException)13 StringWriter (java.io.StringWriter)13 Schema (org.oasisopen.odata.csdl.v4.Schema)13 Schema (com.reprezen.kaizen.oasparser.model3.Schema)11 JAXBElement (javax.xml.bind.JAXBElement)10 ArrayList (java.util.ArrayList)9 HashMap (java.util.HashMap)9 List (java.util.List)8