/*
* 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 javax.annotation.PostConstruct;
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.event.Event;
import javax.enterprise.inject.Instance;
import javax.inject.Inject;
import javax.inject.Named;
import org.guvnor.common.services.backend.util.CommentedOptionFactory;
import org.guvnor.common.services.shared.metadata.model.Metadata;
import org.guvnor.common.services.shared.metadata.model.Overview;
import org.jboss.errai.bus.server.annotations.Service;
import org.jboss.errai.security.shared.api.identity.User;
import org.kie.workbench.common.services.backend.service.KieService;
import org.kie.workbench.common.services.shared.project.KieProjectService;
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.definition.service.DefinitionSetService;
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.service.ProjectDiagramService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.uberfire.backend.vfs.Path;
import org.uberfire.io.IOService;
import org.uberfire.rpc.SessionInfo;
import org.uberfire.workbench.events.ResourceOpenedEvent;
@Service
@ApplicationScoped
public class ProjectDiagramServiceImpl extends KieService<ProjectDiagram>
implements ProjectDiagramService {
private static final Logger LOG =
LoggerFactory.getLogger(ProjectDiagramServiceImpl.class.getName());
private final User identity;
private final SessionInfo sessionInfo;
private final Event<ResourceOpenedEvent> resourceOpenedEvent;
private final KieProjectService projectService;
private final CommentedOptionFactory commentedOptionFactory;
private final ProjectDiagramServiceController controller;
protected ProjectDiagramServiceImpl() {
this(null,
null,
null,
null,
null,
null,
null,
null,
null,
null);
}
@Inject
public ProjectDiagramServiceImpl(final DefinitionManager definitionManager,
final FactoryManager factoryManager,
final Instance<DefinitionSetService> definitionSetServiceInstances,
final BackendRegistryFactory registryFactory,
final @Named("ioStrategy") IOService ioService,
final User identity,
final SessionInfo sessionInfo,
final Event<ResourceOpenedEvent> resourceOpenedEvent,
final KieProjectService projectService,
final CommentedOptionFactory commentedOptionFactory) {
this.ioService = ioService;
this.identity = identity;
this.sessionInfo = sessionInfo;
this.resourceOpenedEvent = resourceOpenedEvent;
this.projectService = projectService;
this.commentedOptionFactory = commentedOptionFactory;
this.controller =
new ProjectDiagramServiceController(definitionManager,
factoryManager,
definitionSetServiceInstances,
ioService,
registryFactory);
}
@PostConstruct
public void init() {
// Initialize caches.
controller.initialize();
}
@Override
public ProjectDiagram getDiagramByPath(final Path path) {
return controller.getDiagramByPath(path);
}
@Override
public boolean accepts(final Path path) {
return controller.accepts(path);
}
public Path create(final Path path,
final String name,
final String defSetId,
final String projName,
final String projPkg) {
return controller.create(path,
name,
defSetId,
projName,
projPkg);
}
@Override
public Path create(final Path path,
final String name,
final String defSetId) {
return controller.create(path,
name,
defSetId);
}
@Override
protected ProjectDiagram constructContent(final Path path,
final Overview overview) {
ProjectDiagram diagram = getDiagramByPath(path);
if (null != diagram) {
resourceOpenedEvent.fire(new ResourceOpenedEvent(path,
sessionInfo));
return diagram;
}
LOG.error("Failed to construct diagram content for path [" + path + "].");
return null;
}
@Override
public Path save(final Path path,
final ProjectDiagram content,
final Metadata metadata,
final String comment) {
LOG.warn("Saving diagram with UUID [" + content.getName() + "] into path [" + path + "].");
return controller.save(path,
content,
metadataService.setUpAttributes(path,
metadata),
commentedOptionFactory.makeCommentedOption(comment));
}
@Override
public ProjectMetadata saveOrUpdate(final ProjectDiagram diagram) {
return controller.saveOrUpdate(diagram);
}
@Override
public boolean delete(final ProjectDiagram diagram) {
return controller.delete(diagram);
}
@Override
public void delete(final Path path,
final String comment) {
controller.delete(path,
comment);
}
}