blob: a732e860ebea25d7ea6abd8a7197fb13b353baed [file] [log] [blame]
/*****************************************************************************
* Copyright (c) 2011, 2017 CEA LIST, Christian W. Damus, and others.
*
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Patrick Tessier (CEA LIST) Patrick.tessier@cea.fr - Initial API and implementation
* Christian W. Damus (CEA LIST) - adapted for CDO repository resource hyperlinks
* Christian W. Damus - bug 488965
*
*****************************************************************************/
package org.eclipse.papyrus.cdo.internal.ui.hyperlink;
import static com.google.common.base.Predicates.instanceOf;
import static com.google.common.collect.Iterables.filter;
import java.util.List;
import org.eclipse.emf.cdo.eresource.CDOResource;
import org.eclipse.emf.cdo.eresource.CDOResourceLeaf;
import org.eclipse.emf.cdo.eresource.CDOResourceNode;
import org.eclipse.emf.common.command.Command;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EAnnotation;
import org.eclipse.emf.ecore.EModelElement;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.transaction.RecordingCommand;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.jface.window.Window;
import org.eclipse.papyrus.cdo.internal.ui.views.DIModel;
import org.eclipse.papyrus.infra.core.utils.AdapterUtils;
import org.eclipse.papyrus.infra.hyperlink.helper.AbstractHyperLinkHelper;
import org.eclipse.papyrus.infra.hyperlink.helper.IHyperlinkHelperExtension;
import org.eclipse.papyrus.infra.hyperlink.object.HyperLinkObject;
import org.eclipse.papyrus.infra.hyperlink.util.HyperLinkConstants;
import org.eclipse.swt.widgets.Shell;
import com.google.common.collect.ImmutableList;
/**
* Helper extension for hyperlinks to resources in CDO model repositories.
*/
public class CDOResourceHyperlinkHelper extends AbstractHyperLinkHelper implements IHyperlinkHelperExtension {
@Override
public HyperLinkObject getHyperLinkObject(EAnnotation eAnnotation) {
CDOResourceHyperlink result = null;
if (eAnnotation.getSource().equals(CDOHyperlinkConstants.HYPERLINK_ANNOTATION_SOURCE)) {
result = new CDOResourceHyperlink();
result.setHyperlink(URI.createURI(eAnnotation.getDetails().get(CDOHyperlinkConstants.HYPERLINK_DETAIL_URI)));
result.setTooltipText(eAnnotation.getDetails().get(HyperLinkConstants.HYPERLINK_TOOLTYPE_TEXT));
if (eAnnotation.getDetails().get(HyperLinkConstants.HYPERLINK_IS_DEFAULT_NAVIGATION) != null) {
boolean isDefaultNaviagation = Boolean.parseBoolean(eAnnotation.getDetails().get(HyperLinkConstants.HYPERLINK_IS_DEFAULT_NAVIGATION));
result.setIsDefault(isDefaultNaviagation);
} else {
result.setIsDefault(false);
}
}
return result;
}
@Override
public RecordingCommand getAddHyperLinkCommand(TransactionalEditingDomain domain, EModelElement object, HyperLinkObject hyperlinkObject) {
RecordingCommand result = null;
if (hyperlinkObject instanceof CDOResourceHyperlink) {
CDOResourceHyperlink cdoHyperlink = (CDOResourceHyperlink) hyperlinkObject;
result = new CreateCDOResourceHyperlinkCommand(domain, object, cdoHyperlink.getTooltipText(), cdoHyperlink.getHyperlink(), cdoHyperlink.getIsDefault());
}
return result;
}
@Override
public String getNameofManagedHyperLink() {
return Messages.CDOResourceHyperlinkHelper_name;
}
@Override
public void executeNewMousePressed(Shell parentShell, List<HyperLinkObject> list, EObject aModel) {
CDOResourceHyperlinkEditorShell editor = new CDOResourceHyperlinkEditorShell(parentShell);
if (editor.open() == Window.OK) {
list.add(editor.getHyperlink());
}
}
@Override
public List<HyperLinkObject> getFilteredObject(List<HyperLinkObject> hyperlinkObjects) {
return ImmutableList.copyOf(filter(hyperlinkObjects, instanceOf(CDOResourceHyperlink.class)));
}
@Override
public Command getCreateHyperlinkCommand(TransactionalEditingDomain domain, EModelElement linkOwner, Object linkTarget) {
Command result = null;
CDOResourceNode node = AdapterUtils.adapt(linkTarget, CDOResourceNode.class, null);
if (node instanceof CDOResourceLeaf) {
URI uri = node.getURI();
String tip = uri.lastSegment();
if (node instanceof CDOResource) {
DIModel di = DIModel.getInstance((CDOResource) node, false);
if (di != null) {
// it's a DI model. We don't use file extensions with their names
tip = di.getName();
}
}
// don't navigate CDO documents by default; this is most appropriate for links to diagrams
result = new CreateCDOResourceHyperlinkCommand(domain, linkOwner, tip, uri, false);
}
return result;
}
}