package org.goko.core.workspace.handlers; import java.io.File; import java.net.URI; import org.apache.commons.io.FilenameUtils; import org.apache.commons.lang3.StringUtils; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.URIUtil; import org.eclipse.e4.core.di.annotations.CanExecute; import org.eclipse.e4.core.di.annotations.Execute; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Shell; import org.goko.core.common.exception.GkException; import org.goko.core.workspace.element.GkProject; import org.goko.core.workspace.io.IProjectLocation; import org.goko.core.workspace.service.IWorkspaceService; /** * Handler for project save * @author Psyko */ public class SaveProjectHandler { @CanExecute public boolean canExecute(IWorkspaceService workspaceService) throws GkException{ GkProject project = workspaceService.getProject(); return project != null && project.isDirty(); } @Execute public boolean saveProject(Shell shell, IWorkspaceService workspaceService) throws GkException{ boolean saveDone = false; GkProject project = workspaceService.getProject(); IProjectLocation projectLocation = project.getLocation(); if(!projectLocation.isLocationDefined()){ FileDialog dialog = new FileDialog(shell, SWT.SAVE); dialog.setText("Save Goko project..."); dialog.setFilterNames(new String[]{"Goko projects (*.goko) "}); dialog.setFilterExtensions(new String[]{"*.goko"}); String targetFile = dialog.open(); if(StringUtils.isNotEmpty(targetFile)){ String fileName = FilenameUtils.getBaseName(targetFile); String projectName = FilenameUtils.removeExtension(fileName); String path = FilenameUtils.getPathNoEndSeparator(targetFile); projectLocation.setName( projectName ); URI projectUri = null; if(StringUtils.endsWith(path, projectName)){ projectUri = new File(targetFile).getParentFile().toURI(); }else{ projectUri = URIUtil.append(new File(targetFile).getParentFile().toURI(), projectName); } new File(projectUri).mkdirs(); projectLocation.setLocation(projectUri); } } if(projectLocation.isLocationDefined()){ workspaceService.saveProject(projectLocation, new NullProgressMonitor()); saveDone = true; } return saveDone; } }