/*****************************************************************************
* Copyright (c) 2009-2011 CEA LIST.
*
*
* 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:
* Patrick Tessier (CEA LIST) Patrick.tessier@cea.fr - Initial API and implementation
*
*****************************************************************************/
package org.eclipse.papyrus.infra.hyperlink.helper;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.emf.common.command.Command;
import org.eclipse.emf.common.command.CompoundCommand;
import org.eclipse.emf.ecore.EAnnotation;
import org.eclipse.emf.ecore.EModelElement;
import org.eclipse.emf.transaction.RecordingCommand;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.papyrus.infra.hyperlink.commands.DeleteHyperLinkDocumentCommand;
import org.eclipse.papyrus.infra.hyperlink.commands.EmptyAllHyperLinkCommand;
import org.eclipse.papyrus.infra.hyperlink.messages.Messages;
import org.eclipse.papyrus.infra.hyperlink.object.HyperLinkObject;
import org.eclipse.papyrus.infra.hyperlink.util.HyperLinkException;
/**
* The Class HyperlinkHelper, contains all methods to manipulate information
* about hyperlinks in a model
*/
public class HyperLinkHelperFactory {
protected List<AbstractHyperLinkHelper> hyperLinkHelpers= new ArrayList<AbstractHyperLinkHelper>();
public List<AbstractHyperLinkHelper> getHyperLinkHelpers() {
return hyperLinkHelpers;
}
public HyperLinkHelperFactory(List<AbstractHyperLinkHelper> hyperLinkHelpers){
this.hyperLinkHelpers.clear();
this.hyperLinkHelpers.addAll(hyperLinkHelpers);
}
/**
* Gets the adds the hyper link command.
*
* @param domain
* the domain to execute command
* @param object
* the object where it is attached the information
* @param localization
* the localization of the document
* @param tooltipText
* the tooltip text
* @param isDefault
* to set this hyperlink as default
* @return the adds the hyper link command
*/
public Command getAddHyperLinkCommand(TransactionalEditingDomain domain, EModelElement object, List<HyperLinkObject> hyperlinkObjects) throws HyperLinkException{
CompoundCommand cmpCommand= new CompoundCommand(Messages.HyperLinkHelperFactory_addHyperLinksCommand);
Iterator<HyperLinkObject> iterator= hyperlinkObjects.iterator();
while(iterator.hasNext()) {
HyperLinkObject hyperlinkObject = (HyperLinkObject)iterator.next();
RecordingCommand cmd=null;
int i=0;
while(cmd==null &&i<hyperLinkHelpers.size()){
cmd= hyperLinkHelpers.get(i).getAddHyperLinkCommand(domain, object, hyperlinkObject);
i++;
}
if( cmd==null){
throw new HyperLinkException(Messages.HyperLinkHelperFactory_ImpossibleToFindACommandToSerialize +hyperlinkObject);
}
cmpCommand.append(cmd);
}
return cmpCommand.isEmpty() ? null : cmpCommand ;
}
/**
* use to remove a hyperlink web or document
*
* @param domain
* the domain to execute the command
* @param object
* the object where was attached the information
* @param localization
* the localization or link
*
* @return the removes the element command
*/
public static RecordingCommand getRemoveHyperlinkCommand(TransactionalEditingDomain domain, EModelElement object, String localization) {
return new DeleteHyperLinkDocumentCommand(domain, object, localization);
}
/**
* Gets the allreferenced element.
*
* @param object
* the object where we look for information
*
* @return the allreferenced
*/
public ArrayList<?> getAllreferenced(EModelElement object) throws HyperLinkException{
ArrayList<HyperLinkObject> result = new ArrayList<HyperLinkObject>();
Iterator<EAnnotation> iter = object.getEAnnotations().iterator();
while(iter.hasNext()) {
EAnnotation currentAnnotation = iter.next();
int i=0;
HyperLinkObject hyperlinkObject=null;
while(hyperlinkObject==null &&i<hyperLinkHelpers.size()){
hyperlinkObject= hyperLinkHelpers.get(i).getHyperLinkObject(currentAnnotation);
i++;
}
if(hyperlinkObject!=null){
result.add(hyperlinkObject);}
}
return result;
}
/**
* Gets the empty all hyper link command. to clean all hyperlinks
*
* @param domain
* the domain to execute the command
* @param object
* the object where is attached information
*
* @return the empty all hyper link command
*/
public static EmptyAllHyperLinkCommand getEmptyAllHyperLinkCommand(TransactionalEditingDomain domain, EModelElement object) {
return new EmptyAllHyperLinkCommand(domain, object);
}
}