/******************************************************************************* * Copyright (c) 2006, 2010 Soyatec (http://www.soyatec.com) 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: * * Soyatec - initial API and implementation * *******************************************************************************/ package org.eclipse.papyrus.xwt.javabean.metadata; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import org.eclipse.papyrus.xwt.IXWTLoader; import org.eclipse.papyrus.xwt.jface.ComboBoxCellEditor; import org.eclipse.papyrus.xwt.jface.JFacesHelper; import org.eclipse.papyrus.xwt.metadata.IMetaclass; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Widget; public class ComboBoxCellEditorMetaclass extends Metaclass { public ComboBoxCellEditorMetaclass(IMetaclass superClass, IXWTLoader xwtLoader) { super(ComboBoxCellEditor.class, superClass, xwtLoader); } /** * @see org.eclipse.papyrus.xwt.javabean.metadata.Metaclass#newInstance(java.lang. Object[]) */ @Override public Object newInstance(Object[] parameters) { try { if(parameters.length == 1) { Constructor<?> constructor = getType().getConstructor(Composite.class, String[].class); return constructor.newInstance(getParent(parameters[0]), new String[]{}); } else if(parameters.length == 2) { Constructor<?> constructor = getType().getConstructor(Composite.class, String[].class, int.class); return constructor.newInstance(getParent(parameters[0]), new String[]{}, parameters[2]); } else if(parameters.length == 3) { Constructor<?> constructor = getType().getConstructor(Composite.class, String[].class, int.class); return constructor.newInstance(getParent(parameters[0]), parameters[1], parameters[2]); } } catch (SecurityException e1) { } catch (IllegalArgumentException e1) { } catch (NoSuchMethodException e1) { } catch (InstantiationException e1) { } catch (IllegalAccessException e1) { } catch (InvocationTargetException e1) { } return super.newInstance(parameters); } private Widget getParent(Object object) { Widget parent = null; Widget directParent = null; if(object instanceof Widget) { directParent = parent = (Widget)object; } else if(JFacesHelper.isViewer(object)) { directParent = parent = JFacesHelper.getControl(object); } else throw new IllegalStateException(); if(Control.class.isAssignableFrom(getType()) && !(parent instanceof Composite)) { directParent = xwtLoader.findCompositeParent(parent); } return directParent; } }