blob: c336ce0b49f0eb5f8dbb9146a71dc0e0d64a3fa4 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2001, 2004 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.wst.wsdl.ui.internal.graph.model;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.common.notify.Notifier;
import org.eclipse.wst.wsdl.Binding;
import org.eclipse.wst.wsdl.Definition;
import org.eclipse.wst.wsdl.XSDSchemaExtensibilityElement;
import org.eclipse.wst.wsdl.ui.internal.graph.ViewMode;
import org.eclipse.wst.wsdl.ui.internal.model.ModelAdapter;
import org.eclipse.wst.wsdl.ui.internal.model.ModelAdapterFactory;
import org.eclipse.wst.wsdl.ui.internal.model.ModelAdapterListener;
import org.eclipse.wst.wsdl.ui.internal.model.WSDLModelAdapterFactory;
import org.eclipse.wst.wsdl.ui.internal.util.ComponentReferenceUtil;
public class WSDLGraphModelAdapterFactory extends WSDLModelAdapterFactory
{
protected static WSDLGraphModelAdapterFactory wsdlGraphModelAdapterFactoryInstance;
public static WSDLGraphModelAdapterFactory getWSDLGraphModelAdapterFactory()
{
if (wsdlGraphModelAdapterFactoryInstance == null)
{
wsdlGraphModelAdapterFactoryInstance = new WSDLGraphModelAdapterFactory();
}
return wsdlGraphModelAdapterFactoryInstance;
}
protected AdapterFactory createAdapterFactory()
{
return new GraphAdapterFactory();
}
//protected boolean isExtensibilityElementConsideredChild()
//{
// return false;
//}
// There are many adapters associated with this factory. Each DOM Node has its own adapter.
//
protected class GraphAdapterFactory extends WSDLAdapterFactoryImpl
{
public Adapter createDefinitionAdapter()
{
return new GraphDefinitionAdapter();
}
public Adapter createBindingAdapter()
{
return new GraphBindingAdapter();
}
public Adapter createPartAdapter()
{
return new GraphPartAdapter();
}
//public Adapter createPortAdapter()
//{
// return new GraphPortAdapter();
//}
public Adapter createPortTypeAdapter()
{
return new GraphPortTypeAdapter();
}
//public Adapter createInputAdapter()
//{
// return new GraphInputAdapter();
//}
//public Adapter createOutputAdapter()
//{
// return new GraphOutputAdapter();
//}
//public Adapter createFaultAdapter()
//{
// return new GraphFaultAdapter();
//}
public Adapter createTypesAdapter()
{
return new GraphTypesAdapter();
}
}
protected class GraphDefinitionAdapter extends DefinitionAdapter implements ViewMode.Listener
{
protected ViewMode viewMode = new ViewMode();
public void setTarget(Notifier newTarget)
{
super.setTarget(newTarget);
viewMode.addListener(this);
}
protected List getChildren()
{
List list = new ArrayList();
list.add(permanentWSDLGroupObjectList.get(0));
list.add(permanentWSDLGroupObjectList.get(1));
list.add(permanentWSDLGroupObjectList.get(5));
if (viewMode.isBindingVisible())
{
list.add(permanentWSDLGroupObjectList.get(4));
}
list.add(permanentWSDLGroupObjectList.get(3));
list.add(permanentWSDLGroupObjectList.get(2));
if (extensibilityElementsGroup.getChildren().size() > 0)
{
list.add(extensibilityElementsGroup);
}
return list;
}
public void viewModeChanged(ViewMode mode)
{
firePropertyChangedHelper();
}
public ViewMode getViewMode()
{
return viewMode;
}
protected ModelAdapterFactory getModelAdapterFactory()
{
return getWSDLGraphModelAdapterFactory();
}
}
protected class GraphBindingAdapter extends BindingAdapter
{ /*
protected List getChildren()
{
List list = new ArrayList();
if (binding.getPortType() != null)
{
list.add(binding.getPortType());
}
return list;
}*/
}
protected class GraphPartAdapter extends PartAdapter
{ /*
protected List getChildren()
{
List list = new ArrayList();
Object component = part.getType();
if (component != null)
{
// TODO... i'm pulling a fast one here.... we should call the extension
// to see if he wants to show a child here
if (component instanceof org.eclipse.xsd.XSDComplexTypeDefinition)
{
list.add(component);
}
}
else
{
component = part.getElement();
if (component != null)
{
list.add(component);
}
}
return list;
}*/
}
protected class GraphPortTypeAdapter extends PortTypeAdapter
{
public Object getProperty(Object modelObject, String propertyName)
{
Object result = null;
if (propertyName.equals("bindings"))
{
ComponentReferenceUtil util = new ComponentReferenceUtil(portType.getEnclosingDefinition());
result = util.getBindings(portType);
}
else
{
result = super.getProperty(modelObject, propertyName);
}
return result;
}
}
protected class GraphPortAdapter extends PortAdapter implements ModelAdapterListener
{
protected List getChildren()
{
List list = new ArrayList();
Binding binding = (Binding)port.getBinding();
if (binding != null)
{
list.add(binding);
}
return list;
}
// propagate changes to the binding object
//
public void propertyChanged(Object object, String property)
{
firePropertyChanged(port, null);
}
}
protected class GraphInputAdapter extends InputAdapter
{
protected List getChildren()
{
List list = new ArrayList();
if (input.getMessage() != null)
{
list.add(input.getMessage());
}
return list;
}
public Object getProperty(Object modelObject, String propertyName)
{
Object result = null;
if (propertyName.equals("bindings"))
{
ComponentReferenceUtil util = new ComponentReferenceUtil(input.getEnclosingDefinition());
result = util.getBindingInputs(input);
}
else
{
result = super.getProperty(modelObject, propertyName);
}
return result;
}
}
protected class GraphOutputAdapter extends OutputAdapter
{
protected List getChildren()
{
List list = new ArrayList();
if (output.getMessage() != null)
{
list.add(output.getMessage());
}
return list;
}
public Object getProperty(Object modelObject, String propertyName)
{
Object result = null;
if (propertyName.equals("bindings"))
{
ComponentReferenceUtil util = new ComponentReferenceUtil(output.getEnclosingDefinition());
result = util.getBindingOutputs(output);
}
else
{
result = super.getProperty(modelObject, propertyName);
}
return result;
}
}
protected class GraphFaultAdapter extends FaultAdapter
{
protected List getChildren()
{
List list = new ArrayList();
if (fault.getMessage() != null)
{
list.add(fault.getMessage());
}
return list;
}
public Object getProperty(Object modelObject, String propertyName)
{
Object result = null;
if (propertyName.equals("bindings"))
{
ComponentReferenceUtil util = new ComponentReferenceUtil(fault.getEnclosingDefinition());
result = util.getBindingFaults(fault);
}
else
{
result = super.getProperty(modelObject, propertyName);
}
return result;
}
}
public class GraphTypesAdapter extends TypesAdapter
{
protected List getChildren()
{
List list = new ArrayList();
for (Iterator i = types.getEExtensibilityElements().iterator(); i.hasNext(); )
{
Object o = i.next();
if (o instanceof XSDSchemaExtensibilityElement)
{
XSDSchemaExtensibilityElement s = (XSDSchemaExtensibilityElement)o;
Object schema = s.getSchema();
if (schema != null)
{
list.add(schema);
}
}
else
{
list.add(o);
}
}
return list;
}
}
/*
protected class GraphBindingAdapter extends BindingAdapter
{
protected List getChildren()
{
List list = new ArrayList();
if (binding.getPortType() != null)
{
list.add(binding.getPortType());
}
return list;
}
}*/
// convenience methods
//
public static void addModelAdapterListener(Object modelObject, ModelAdapterListener listener)
{
// TODO: port check
ModelAdapter adapter = getWSDLGraphModelAdapterFactory().getAdapter(modelObject);
// ModelAdapter adapter = EcoreUtil.getAdapter(getWSDLGraphModelAdapterFactory().eAdapters(),modelObject);
if (adapter != null)
{
adapter.addListener(listener);
}
}
public static void removeModelAdapterListener(Object modelObject, ModelAdapterListener listener)
{
ModelAdapter adapter = getWSDLGraphModelAdapterFactory().getAdapter(modelObject);
if (adapter != null)
{
adapter.removeListener(listener);
}
}
public static ViewMode getViewMode(Definition definition)
{
GraphDefinitionAdapter adapter = (GraphDefinitionAdapter)getWSDLGraphModelAdapterFactory().getAdapter(definition);
return adapter.getViewMode();
}
}