/******************************************************************************* * Copyright (c) 2007 Exadel, Inc. and 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: * Exadel, Inc. and Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.seam.ui.pages.editor.edit; import java.util.ArrayList; import java.util.Iterator; import org.eclipse.jface.viewers.IStructuredSelection; import org.jboss.tools.common.model.XModelObject; import org.jboss.tools.jst.web.model.ReferenceObject; import org.jboss.tools.seam.pages.xml.model.SeamPagesConstants; import org.jboss.tools.seam.ui.pages.editor.ecore.pages.Link; import org.jboss.tools.seam.ui.pages.editor.ecore.pages.PagesElement; /** * * @author Viacheslav Kabanovich * */ public class SelectionUtil { /** * Returns array of XModelObject objects associated with selection * containing PagesEditPart objects. * @param ss * @return */ public static XModelObject[] getTargets(IStructuredSelection ss) { if(ss.size() < 2) return null; Iterator it = ss.iterator(); ArrayList<XModelObject> l = new ArrayList<XModelObject>(); while(it.hasNext()) { XModelObject o = getTarget(it.next()); if(o != null) l.add(o); } return l.toArray(new XModelObject[0]); } /** * Returns XModelObject associated with PagesEditPart * @param selected * @return */ public static XModelObject getTarget(Object selected) { if(selected instanceof ParamEditPart) { ParamEditPart part = (ParamEditPart)selected; Object partModel = part.getParamModel().getParent(); if(partModel instanceof PagesElement) { XModelObject o = (XModelObject)((PagesElement)partModel).getData(); if(o instanceof ReferenceObject) { XModelObject p = ((ReferenceObject)o).getReference(); if(p != null) { String name = part.getParamModel().getName(); XModelObject[] cs = p.getChildren(); for (int i = 0; i < cs.length; i++) { if(name.equals(cs[i].getAttributeValue(SeamPagesConstants.ATTR_NAME))) { return cs[i]; } } } } return o; } } if(selected instanceof PagesEditPart) { PagesEditPart part = (PagesEditPart)selected; Object partModel = part.getModel(); if(partModel instanceof PagesElement) { return (XModelObject)((PagesElement)partModel).getData(); } } if(selected instanceof LinkEditPart) { LinkEditPart part = (LinkEditPart)selected; Object partModel = part.getModel(); if(partModel instanceof Link) { return (XModelObject)((Link)partModel).getData(); } } return null; } }