/* * Copyright 2017 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.kie.workbench.common.stunner.project.backend.service; import java.io.InputStream; import java.util.Map; import javax.enterprise.inject.Instance; import org.kie.workbench.common.stunner.core.api.DefinitionManager; import org.kie.workbench.common.stunner.core.api.FactoryManager; import org.kie.workbench.common.stunner.core.backend.service.AbstractVFSDiagramService; import org.kie.workbench.common.stunner.core.definition.service.DefinitionSetService; import org.kie.workbench.common.stunner.core.diagram.Metadata; import org.kie.workbench.common.stunner.core.registry.BackendRegistryFactory; import org.kie.workbench.common.stunner.project.diagram.ProjectDiagram; import org.kie.workbench.common.stunner.project.diagram.ProjectMetadata; import org.kie.workbench.common.stunner.project.diagram.impl.ProjectMetadataImpl; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.uberfire.backend.server.util.Paths; import org.uberfire.backend.vfs.Path; import org.uberfire.io.IOService; import org.uberfire.java.nio.file.OpenOption; import org.uberfire.java.nio.file.StandardDeleteOption; class ProjectDiagramServiceController extends AbstractVFSDiagramService<ProjectMetadata, ProjectDiagram> { private static final Logger LOG = LoggerFactory.getLogger(ProjectDiagramServiceController.class.getName()); ProjectDiagramServiceController(final DefinitionManager definitionManager, final FactoryManager factoryManager, final Instance<DefinitionSetService> definitionSetServiceInstances, final IOService ioService, final BackendRegistryFactory registryFactory) { super(definitionManager, factoryManager, definitionSetServiceInstances, ioService, registryFactory); } @Override protected void initialize() { // Initialize caches. super.initialize(); } @Override protected Class<? extends Metadata> getMetadataType() { return ProjectMetadata.class; } @Override public Path create(final Path path, final String name, final String defSetId) { return create(path, name, defSetId, null, null); } public Path create(final Path path, final String name, final String defSetId, final String projName, final String projPkg) { ProjectMetadata metadata = buildProjectMetadataInstance(path, name, defSetId, projName, projPkg); return this.create(path, name, defSetId, metadata); } // TODO: Jeremy - set project name and package values when loading a diagram. @Override protected ProjectMetadata buildMetadataInstance(final org.uberfire.backend.vfs.Path path, final String defSetId, final String title) { return buildProjectMetadataInstance(path, title, defSetId, null, null); } private ProjectMetadata buildProjectMetadataInstance(final Path path, final String name, final String defSetId, final String projName, final String projPkg) { return new ProjectMetadataImpl.ProjectMetadataBuilder() .forDefinitionSetId(defSetId) .forProjectName(projName) .forProjectPackage(projPkg) .forTitle(name) .forPath(path) .build(); } @Override protected InputStream loadMetadataForPath(final Path path) { return null; } public Path save(final Path path, final ProjectDiagram diagram, final Map<String, ?> attributes, final OpenOption... comment) { try { String[] raw = serizalize(diagram); getIoService().write(Paths.convert(path), raw[0], attributes, comment); } catch (Exception e) { LOG.error("Error while saving diagram with UUID [" + diagram.getName() + "].", e); throw new RuntimeException(e); } return path; } @Override protected ProjectMetadata doSave(final ProjectDiagram diagram, final String raw, final String metadata) { try { Path _path = diagram.getMetadata().getPath(); org.uberfire.java.nio.file.Path path = Paths.convert(_path); if (!getIoService().exists(path)) { final org.uberfire.java.nio.file.Path parent = path.getParent(); final String fileName = path.getFileName().toString(); path = parent.resolve(fileName); } getIoService().write(path, raw); } catch (Exception e) { LOG.error("Error while saving diagram with UUID [" + diagram.getName() + "].", e); throw new RuntimeException(e); } return diagram.getMetadata(); } // TODO: Use commit message. public boolean delete(final Path _path, final String message) { final org.uberfire.java.nio.file.Path path = Paths.convert(_path); return getIoService().deleteIfExists(path, StandardDeleteOption.NON_EMPTY_DIRECTORIES); } @Override protected boolean doDelete(final Path path) { return delete(path, ""); } }