/******************************************************************************* * Copyright (c) 2008 Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is made available under the terms of the * Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.smooks.graphical.editors; import java.util.Iterator; import java.util.List; import org.eclipse.emf.common.util.Diagnostic; import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain; import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider; import org.eclipse.gef.EditPart; import org.eclipse.gef.GraphicalViewer; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.ITreeContentProvider; import org.jboss.tools.smooks.configuration.editors.IFieldMarker; import org.jboss.tools.smooks.configuration.editors.utils.SmooksUIUtils; import org.jboss.tools.smooks.editor.ISmooksModelProvider; import org.jboss.tools.smooks.gef.common.RootModel; import org.jboss.tools.smooks.gef.model.AbstractSmooksGraphicalModel; import org.jboss.tools.smooks.gef.tree.model.TreeNodeConnection; import org.jboss.tools.smooks.graphical.editors.autolayout.IAutoLayout; import org.jboss.tools.smooks.graphical.editors.autolayout.JavaMappingAutoLayout; import org.jboss.tools.smooks.graphical.editors.model.javamapping.JavaBeanGraphModel; import org.jboss.tools.smooks.graphical.editors.model.javamapping.JavaMappingActionCreator; import org.jboss.tools.smooks.model.javabean12.BeanType; import org.jboss.tools.smooks.model.javabean12.ValueType; /** * @author Dart * */ public class SmooksJavaMappingGraphicalEditor extends SmooksGraphicalEditorPart { private IAutoLayout javaMappingAutoLayout; public SmooksJavaMappingGraphicalEditor(ISmooksModelProvider provider) { super(provider); // TODO Auto-generated constructor stub } /* * (non-Javadoc) * * @seeorg.jboss.tools.smooks.graphical.editors.SmooksGraphicalEditorPart# * needToLayoutWhenAddModel(java.lang.Object) */ @Override protected boolean needToLayoutWhenAddModel(Object model) { model = AdapterFactoryEditingDomain.unwrap(model); if (model instanceof BeanType) { return true; } return super.needToLayoutWhenAddModel(model); } /* * (non-Javadoc) * * @seeorg.jboss.tools.smooks.graphical.editors.SmooksGraphicalEditorPart# * validateEnd(java.util.List) */ @Override public void validateEnd(List<Diagnostic> diagnosticResult) { super.validateEnd(diagnosticResult); // validate decoder type (target connections of java property node) GraphicalViewer viewer = this.getGraphicalViewer(); if (viewer != null) { EditPart rootEditPart = viewer.getContents(); Object rootModel = rootEditPart.getModel(); if (rootModel instanceof AbstractSmooksGraphicalModel) { validateConnection((AbstractSmooksGraphicalModel) rootModel); } } } /** * * @param model */ protected void validateConnection(AbstractSmooksGraphicalModel model) { List<TreeNodeConnection> targetConnections = model.getTargetConnections(); if (targetConnections != null) { for (Iterator<?> iterator = targetConnections.iterator(); iterator.hasNext();) { TreeNodeConnection connection = (TreeNodeConnection) iterator.next(); Object target = connection.getTargetNode().getData(); target = AdapterFactoryEditingDomain.unwrap(target); if (target instanceof ValueType) { ValueType value = (ValueType) target; String decoder = value.getDecoder(); connection.getMessage().clear(); boolean changed = false; String defaultDecoder = SmooksUIUtils.getDefualtDecoder(value); if (defaultDecoder == null) { connection.setSeverity(IFieldMarker.TYPE_NONE); continue; } if (decoder != null) { if (!decoder.equals(defaultDecoder)) { connection.addMessage(Messages.SmooksJavaMappingGraphicalEditor_WarningMessage1 + defaultDecoder + "'."); //$NON-NLS-1$ connection.setSeverity(IFieldMarker.TYPE_WARINING); changed = true; } } if(!changed){ connection.setSeverity(IFieldMarker.TYPE_NONE); } } } } List<AbstractSmooksGraphicalModel> children = model.getChildrenWithoutDynamic(); if(model instanceof RootModel){ children = model.getChildren(); } for (Iterator<?> iterator = children.iterator(); iterator.hasNext();) { AbstractSmooksGraphicalModel abstractSmooksGraphicalModel = (AbstractSmooksGraphicalModel) iterator.next(); validateConnection(abstractSmooksGraphicalModel); } } /* * (non-Javadoc) * * @seeorg.jboss.tools.smooks.graphical.editors.SmooksGraphicalEditorPart# * needToLayoutWhenRemoveModel(java.lang.Object) */ @Override protected boolean needToLayoutWhenRemoveModel(Object model) { model = AdapterFactoryEditingDomain.unwrap(model); if (model instanceof BeanType) { return true; } return super.needToLayoutWhenRemoveModel(model); } /* * (non-Javadoc) * * @seeorg.jboss.tools.smooks.graphical.editors.SmooksGraphicalEditorPart# * getDiagnosticMessage(org.eclipse.emf.common.util.Diagnostic) */ @Override protected String getDiagnosticMessage(Diagnostic diagnostic) { return super.getDiagnosticMessage(diagnostic); } /* * (non-Javadoc) * * @seeorg.jboss.tools.smooks.graphical.editors.SmooksGraphicalEditorPart# * getAutoLayout() */ @Override public IAutoLayout getAutoLayout() { if (javaMappingAutoLayout == null) { javaMappingAutoLayout = new JavaMappingAutoLayout(); } return javaMappingAutoLayout; } /* * (non-Javadoc) * * @seeorg.jboss.tools.smooks.graphical.editors.SmooksGraphicalEditorPart# * createConnectionModelFactory() */ @Override protected ConnectionModelFactory createConnectionModelFactory() { return new JavaMappingConnectionModelFactory(); } /* * (non-Javadoc) * * @seeorg.jboss.tools.smooks.graphical.editors.SmooksGraphicalEditorPart# * createGraphicalModelFactory() */ @Override protected GraphicalModelFactory createGraphicalModelFactory() { return new JavaMappingGraphicalModelFactory(); } /* * (non-Javadoc) * * @seeorg.jboss.tools.smooks.graphical.editors.SmooksGraphicalEditorPart# * createActions() */ @Override protected void createActions() { super.createActions(); JavaMappingActionCreator creator = new JavaMappingActionCreator(); creator.registXSLActions(getActionRegistry(), getSelectionActions(), this, this.getSmooksModelProvider()); } private class JavaMappingConnectionModelFactory extends ConnectionModelFactoryImpl { } private class JavaMappingGraphicalModelFactory extends GraphicalModelFactoryImpl { protected String getGraphLabelText(Object element) { Object obj = AdapterFactoryEditingDomain.unwrap(element); if (obj instanceof BeanType) { String p = ((BeanType) obj).getBeanId(); if (p == null) { p = Messages.SmooksJavaMappingGraphicalEditor_NullLabel; } return p; } // if (obj instanceof BindingsType) { // String p = ((BindingsType) obj).getBeanId(); // if (p == null) { // p = Messages.SmooksJavaMappingGraphicalEditor_NullLabel; // } // return p; // } // // if (obj instanceof ValueType) { // String p = ((ValueType) obj).getProperty(); // if (p == null) { // p = Messages.SmooksJavaMappingGraphicalEditor_NullLabel; // } // return p; // } // if (obj instanceof WiringType) { // String p = ((WiringType) obj).getProperty(); // if (p == null) { // p = Messages.SmooksJavaMappingGraphicalEditor_NullLabel; // } // return p; // } // if (obj instanceof ExpressionType) { // String p = ((ExpressionType) obj).getProperty(); // if (p == null) { // p = Messages.SmooksJavaMappingGraphicalEditor_NullLabel; // } // return p; // } if (obj instanceof org.jboss.tools.smooks.model.javabean12.ValueType) { String p = ((org.jboss.tools.smooks.model.javabean12.ValueType) obj).getProperty(); if (p == null) { p = Messages.SmooksJavaMappingGraphicalEditor_NullLabel; } return p; } if (obj instanceof org.jboss.tools.smooks.model.javabean12.WiringType) { String p = ((org.jboss.tools.smooks.model.javabean12.WiringType) obj).getProperty(); if (p == null) { p = Messages.SmooksJavaMappingGraphicalEditor_NullLabel; } return p; } if (obj instanceof org.jboss.tools.smooks.model.javabean12.ExpressionType) { String p = ((org.jboss.tools.smooks.model.javabean12.ExpressionType) obj).getProperty(); if (p == null) { p = Messages.SmooksJavaMappingGraphicalEditor_NullLabel; } return p; } return null; } /* * (non-Javadoc) * * @see * org.jboss.tools.smooks.graphical.editors.GraphicalModelFactoryImpl * #createGraphicalModel(java.lang.Object, * org.jboss.tools.smooks.editor.ISmooksModelProvider) */ @Override public Object createGraphicalModel(Object model, ISmooksModelProvider provider) { if (canCreateGraphicalModel(model, provider)) { AbstractSmooksGraphicalModel graphModel = null; AdapterFactoryEditingDomain editingDomain = (AdapterFactoryEditingDomain) provider.getEditingDomain(); ITreeContentProvider contentProvider = new AdapterFactoryContentProvider(editingDomain .getAdapterFactory()); ILabelProvider labelProvider = createLabelProvider(editingDomain.getAdapterFactory()); if (model instanceof BeanType) { graphModel = new JavaBeanGraphModel(model, contentProvider, labelProvider, provider, SmooksJavaMappingGraphicalEditor.this); ((JavaBeanGraphModel) graphModel).setHeaderVisable(true); } // if (model instanceof Xsl) { // graphModel = new XSLTemplateGraphicalModel(model, new // XSLTemplateContentProvider(contentProvider), // new XSLLabelProvider(labelProvider), provider); // ((TreeContainerModel) graphModel).setHeaderVisable(true); // } // if (graphModel == null && model instanceof // AbstractResourceConfig) { // graphModel = new ResourceConfigGraphModelImpl(model, // contentProvider, labelProvider, provider); // ((ResourceConfigGraphModelImpl) // graphModel).setHeaderVisable(true); // } if (graphModel != null) { return graphModel; } return super.createGraphicalModel(graphModel, provider); } return null; } } }