/** * Copyright 2014 SAP AG * * 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.spotter.eclipse.ui.editors; import java.util.Properties; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.spotter.eclipse.ui.Activator; import org.spotter.eclipse.ui.ServiceClientWrapper; import org.spotter.eclipse.ui.UICoreException; import org.spotter.eclipse.ui.editors.factory.ElementFactory; import org.spotter.eclipse.ui.model.IExtensionItem; import org.spotter.eclipse.ui.model.IExtensionItemFactory; import org.spotter.eclipse.ui.model.ImmutableExtensionItemFactory; import org.spotter.eclipse.ui.model.xml.IModelWrapper; import org.spotter.eclipse.ui.model.xml.SpotterConfigModelWrapper; import org.spotter.eclipse.ui.util.DialogUtils; import org.spotter.eclipse.ui.util.SpotterProjectSupport; import org.spotter.eclipse.ui.viewers.PropertiesGroupViewer; import org.spotter.shared.environment.model.XMConfiguration; /** * An editor to edit DynamicSpotter configuration properties. * * @author Denis Knoepfle * */ public class SpotterConfigEditor extends AbstractSpotterEditor { /** * The id of this editor. */ public static final String ID = "org.spotter.eclipse.ui.editors.spotterconfig"; private static final String EDITOR_NAME = "DynamicSpotter Config"; private IModelWrapper wrapper; private PropertiesGroupViewer propertiesGroupViewer; @Override protected String getEditorName() { return EDITOR_NAME; } @Override public String getEditorId() { return ID; } @Override protected AbstractSpotterEditorInput createEditorInput(IFile file) { return ElementFactory.createEditorInput(ID, file); } @Override public void doSave(IProgressMonitor monitor) { AbstractSpotterEditorInput input = (AbstractSpotterEditorInput) getEditorInput(); try { Properties properties = new Properties(); for (XMConfiguration xmConfig : wrapper.getConfig()) { String val = xmConfig.getValue() == null ? "" : xmConfig.getValue(); properties.put(xmConfig.getKey(), val); } SpotterProjectSupport.saveSpotterConfig(input.getFile(), properties); super.doSave(monitor); } catch (Exception e) { DialogUtils.handleError(ERR_MSG_SAVE, e); } } @Override public void createPartControl(Composite parent) { AbstractSpotterEditorInput editorInput = (AbstractSpotterEditorInput) getEditorInput(); setPartName(editorInput.getName()); setContentDescription(editorInput.getPath().toString()); // ensure that the parent's layout is a FillLayout if (!(parent.getLayout() instanceof FillLayout)) { parent.setLayout(new FillLayout()); } String projectName = editorInput.getProject().getName(); ServiceClientWrapper client = Activator.getDefault().getClient(projectName); if (!client.testConnection(false)) { // cannot create part without server information Label label = new Label(parent, SWT.WRAP); label.setText(ERR_MSG_INIT + "\n\nReason: No connection to Spotter Service. Check settings and try again."); return; } propertiesGroupViewer = new PropertiesGroupViewer(parent, this); IExtensionItemFactory factory = new ImmutableExtensionItemFactory(getEditorId()); IExtensionItem inputModel = createInputModel(editorInput.getFile(), factory); if (inputModel != null) { propertiesGroupViewer.updateProperties(inputModel); } else { propertiesGroupViewer.updateProperties(factory.createExtensionItem()); } } @Override public void setFocus() { if (propertiesGroupViewer != null) { propertiesGroupViewer.setFocus(); } } private IExtensionItem createInputModel(IFile file, IExtensionItemFactory factory) { Properties properties; try { properties = SpotterProjectSupport.getSpotterConfig(file); } catch (UICoreException e) { DialogUtils.handleError(ERR_MSG_INIT, e); return null; } wrapper = new SpotterConfigModelWrapper(file.getProject().getName(), properties); IExtensionItem inputModel = factory.createExtensionItem(wrapper); inputModel.setIgnoreConnection(true); return inputModel; } @Override protected boolean isInputApplicable(AbstractSpotterEditorInput input) throws Exception { Properties properties = SpotterProjectSupport.loadPropertiesFile(input.getFile()); return properties != null; } @Override protected void makeInputApplicable(AbstractSpotterEditorInput input) throws UICoreException { String projectName = input.getProject().getName(); Properties properties = SpotterProjectSupport.createDefaultSpotterProperties(projectName); SpotterProjectSupport.saveSpotterConfig(input.getFile(), properties); } }