blob: cb7f866147c1fe8a91a9b619712c4a1516e14697 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2019 Obeo.
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Obeo - initial API and implementation
*******************************************************************************/
package org.eclipse.sirius.services.graphql.internal.schema;
import org.eclipse.sirius.services.graphql.common.api.ISiriusGraphQLTypeCustomizer;
import org.eclipse.sirius.services.graphql.core.api.CoreSchemaConstants;
import org.eclipse.sirius.services.graphql.internal.schema.query.ActivatedViewpointsField;
import org.eclipse.sirius.services.graphql.internal.schema.query.FileEObjectsField;
import org.eclipse.sirius.services.graphql.internal.schema.query.FileRepresentationsField;
import org.eclipse.sirius.services.graphql.internal.schema.query.RepresentationDescriptionEPackagesField;
import org.eclipse.sirius.services.graphql.workspace.api.WorkspaceSchemaConstants;
import graphql.schema.GraphQLInterfaceType;
import graphql.schema.GraphQLObjectType;
/**
* Implementation of the {@link ISiriusGraphQLTypeCustomizer}.
*
* @author sbegaudeau
*/
public class SiriusGraphQLTypeCustomizer implements ISiriusGraphQLTypeCustomizer {
@Override
public GraphQLInterfaceType.Builder customize(String name, GraphQLInterfaceType.Builder interfaceTypeBuilder) {
GraphQLInterfaceType.Builder customizedInterfaceTypeBuilder = interfaceTypeBuilder;
if (CoreSchemaConstants.REPRESENTATION_DESCRIPTION_TYPE.equals(name)) {
customizedInterfaceTypeBuilder = this.customizeRepresentationDescription(interfaceTypeBuilder);
}
return customizedInterfaceTypeBuilder;
}
/**
* Customize the representation description type.
*
* @param objectTypeBuilder
* The builder
* @return The given builder customized
*/
private GraphQLInterfaceType.Builder customizeRepresentationDescription(GraphQLInterfaceType.Builder interfaceTypeBuilder) {
return interfaceTypeBuilder.field(RepresentationDescriptionEPackagesField.build());
}
@Override
public GraphQLObjectType.Builder customize(String name, GraphQLObjectType.Builder objectTypeBuilder) {
GraphQLObjectType.Builder customizedObjectTypeBuilder = objectTypeBuilder;
if (WorkspaceSchemaConstants.FILE_TYPE.equals(name)) {
customizedObjectTypeBuilder = this.customizeFile(objectTypeBuilder);
} else if (WorkspaceSchemaConstants.PROJECT_TYPE.equals(name)) {
customizedObjectTypeBuilder = this.customizeProject(objectTypeBuilder);
} else if (CoreSchemaConstants.DIAGRAM_DESCRIPTION_TYPE.equals(name)) {
customizedObjectTypeBuilder = this.customizeDiagramDescription(objectTypeBuilder);
}
return customizedObjectTypeBuilder;
}
/**
* Customize the diagram description type.
*
* @param objectTypeBuilder
* The builder
* @return The given builder customized
*/
private GraphQLObjectType.Builder customizeDiagramDescription(GraphQLObjectType.Builder objectTypeBuilder) {
return objectTypeBuilder.field(RepresentationDescriptionEPackagesField.build());
}
/**
* Customize the file type.
*
* @param objectTypeBuilder
* The builder
* @return The given builder customized
*/
private GraphQLObjectType.Builder customizeFile(GraphQLObjectType.Builder objectTypeBuilder) {
return objectTypeBuilder.field(FileRepresentationsField.build()).field(FileEObjectsField.build());
}
/**
* Customize the project type.
*
* @param objectTypeBuilder
* The builder
* @return The given builder customized
*/
private GraphQLObjectType.Builder customizeProject(GraphQLObjectType.Builder objectTypeBuilder) {
return objectTypeBuilder.field(ActivatedViewpointsField.build());
}
}