/* * Copyright (c) 2008 Stiftung Deutsches Elektronen-Synchrotron, * Member of the Helmholtz Association, (DESY), HAMBURG, GERMANY. * * THIS SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN "../AS IS" BASIS. * WITHOUT WARRANTY OF ANY KIND, EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED * TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR PARTICULAR PURPOSE AND * NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE * FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * THE USE OR OTHER DEALINGS IN THE SOFTWARE. SHOULD THE SOFTWARE PROVE DEFECTIVE * IN ANY RESPECT, THE USER ASSUMES THE COST OF ANY NECESSARY SERVICING, REPAIR OR * CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. * NO USE OF ANY SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. * DESY HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, * OR MODIFICATIONS. * THE FULL LICENSE SPECIFYING FOR THE SOFTWARE THE REDISTRIBUTION, MODIFICATION, * USAGE AND OTHER RIGHTS AND OBLIGATIONS IS INCLUDED WITH THE DISTRIBUTION OF THIS * PROJECT IN THE FILE LICENSE.HTML. IF THE LICENSE IS NOT INCLUDED YOU MAY FIND A COPY * AT HTTP://WWW.DESY.DE/LEGAL/LICENSE.HTM */ package org.csstudio.sds.ui.internal.editor.newproperties.colorservice; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.net.URL; import java.util.HashMap; import org.csstudio.sds.ui.SdsUiPlugin; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.FileLocator; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ISelection; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.IWorkbenchWindowActionDelegate; import org.eclipse.ui.cheatsheets.ICheatSheetAction; import org.eclipse.ui.cheatsheets.ICheatSheetManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * * @author Kai Meyer (C1 WPS) * */ public class InstallDefaultSettingsAction extends Action implements ICheatSheetAction, IWorkbenchWindowActionDelegate { private static final Logger LOG = LoggerFactory.getLogger(InstallDefaultSettingsAction.class); @Override public void run(String[] params, ICheatSheetManager manager) { run(null); } @Override public void dispose() { } @Override public void init(IWorkbenchWindow window) { } @Override public void run(IAction action) { final IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); final String projectName = "Settings"; final IProject project = root.getProject(projectName); boolean install = !project.exists(); if (!install) { install = MessageDialog.openConfirm(new Shell(), "Project exists", "Project already exists!\r\nOverride?"); if (install) { try { project.create(new NullProgressMonitor()); } catch (CoreException e) { e.printStackTrace(); } } } if (install) { Job job = new Job("Import SDS Default settings") { @Override protected IStatus run(IProgressMonitor monitor) { try { // copy the sample displays if (!project.exists()) { project.create(monitor); } if (!project.isOpen()) { project.open(monitor); } URL url = FileLocator.find(SdsUiPlugin.getDefault().getBundle(), new Path("defaultSettings"), new HashMap()); try { File directory = new File(FileLocator.toFileURL(url).getPath()); if (directory.isDirectory()) { File[] files = directory.listFiles(); monitor.beginTask("Copying Files", count(files)); copy(files, project, monitor); } } catch (IOException e) { e.printStackTrace(); } } catch (CoreException e) { e.printStackTrace(); } return Status.OK_STATUS; } }; job.schedule(); } } private int count(File[] files) { int result = 0; for (File file : files) { if (file.isDirectory()) { result += count(file.listFiles()); } else { result++; } } return result; } private void copy(File[] files, IContainer container, IProgressMonitor monitor) { try { for (File file : files) { monitor.subTask("Copying " + file.getName()); if (file.isDirectory()) { IFolder folder = container.getFolder(new Path(file.getName())); if (!folder.exists()) { folder.create(true, true, null); copy(file.listFiles(), folder, monitor); } } else { IFile pFile = container.getFile(new Path(file.getName())); if (!pFile.exists()) { pFile.create(new FileInputStream(file), true, new NullProgressMonitor()); } monitor.internalWorked(1); } } } catch (Exception e) { LOG.error(e.toString()); } } @Override public void selectionChanged(IAction action, ISelection selection) { } }