/* * Copyright 2014 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.services.backend.project; import javax.enterprise.context.ApplicationScoped; import javax.inject.Inject; import javax.inject.Named; import org.drools.workbench.models.datamodel.imports.Import; import org.drools.workbench.models.datamodel.imports.Imports; import org.guvnor.common.services.backend.exceptions.ExceptionUtilities; import org.guvnor.common.services.project.backend.server.ProjectConfigurationContentHandler; import org.guvnor.common.services.project.model.ProjectImports; 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.kie.workbench.common.services.backend.service.KieService; import org.kie.workbench.common.services.shared.project.ProjectImportsContent; import org.kie.workbench.common.services.shared.project.ProjectImportsService; import org.uberfire.backend.server.util.Paths; import org.uberfire.backend.vfs.Path; import org.uberfire.io.IOService; import org.uberfire.java.nio.file.FileAlreadyExistsException; @Service @ApplicationScoped public class ProjectImportsServiceImpl extends KieService<ProjectImportsContent> implements ProjectImportsService { protected IOService ioService; protected ProjectConfigurationContentHandler projectConfigurationContentHandler; public ProjectImportsServiceImpl() { } @Inject public ProjectImportsServiceImpl(final @Named("ioStrategy") IOService ioService, final ProjectConfigurationContentHandler projectConfigurationContentHandler) { this.ioService = ioService; this.projectConfigurationContentHandler = projectConfigurationContentHandler; } public void saveProjectImports(final Path path) { if (ioService.exists(Paths.convert(path))) { throw new FileAlreadyExistsException(path.toString()); } else { ioService.write(Paths.convert(path), projectConfigurationContentHandler.toString(createProjectImports())); } } private ProjectImports createProjectImports() { ProjectImports projectImports = new ProjectImports(); final Imports imports = projectImports.getImports(); imports.addImport(new Import(java.lang.Number.class.getName())); imports.addImport(new Import(java.lang.Boolean.class.getName())); imports.addImport(new Import(java.lang.String.class.getName())); imports.addImport(new Import(java.lang.Integer.class.getName())); imports.addImport(new Import(java.lang.Double.class.getName())); imports.addImport(new Import(java.util.List.class.getName())); imports.addImport(new Import(java.util.Collection.class.getName())); imports.addImport(new Import(java.util.ArrayList.class.getName())); return projectImports; } @Override public ProjectImportsContent loadContent(Path path) { return super.loadContent(path); } @Override protected ProjectImportsContent constructContent(Path path, Overview overview) { return new ProjectImportsContent(load(path), overview); } @Override public ProjectImports load(final Path path) { try { final org.uberfire.java.nio.file.Path nioPath = Paths.convert(path); if (!ioService.exists(nioPath)) { saveProjectImports(path); } final String content = ioService.readAllString(Paths.convert(path)); return projectConfigurationContentHandler.toModel(content); } catch (Exception e) { throw ExceptionUtilities.handleException(e); } } @Override public Path save(final Path resource, final ProjectImports projectImports, final Metadata metadata, final String comment) { try { ioService.write(Paths.convert(resource), projectConfigurationContentHandler.toString(projectImports), metadataService.setUpAttributes(resource, metadata)); //The pom.xml, kmodule.xml and project.imports are all saved from ProjectScreenPresenter //We only raise InvalidateDMOProjectCacheEvent and ResourceUpdatedEvent(pom.xml) events once //in POMService.save to avoid duplicating events (and re-construction of DMO). return resource; } catch (Exception e) { throw ExceptionUtilities.handleException(e); } } }