/******************************************************************************* * Copyright (c) 2004, 2016 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.ui.internal.intro.impl.model; import org.eclipse.ui.internal.intro.impl.model.url.IntroURL; import org.eclipse.ui.internal.intro.impl.model.url.IntroURLParser; import org.eclipse.ui.internal.intro.impl.model.util.ModelUtil; import org.osgi.framework.Bundle; import org.w3c.dom.Element; import org.w3c.dom.NodeList; /** * An intro Link. This model class is responsible for parsing and creating an * IntroURL class instance if the URL happens to be a valid intro url. */ public class IntroLink extends AbstractTextElement { protected static final String TAG_LINK = "link"; //$NON-NLS-1$ private static final String ATT_LABEL = "label"; //$NON-NLS-1$ private static final String ATT_URL = "url"; //$NON-NLS-1$ private static final String TAG_IMG = "img"; //$NON-NLS-1$ private String label; private String url; private IntroImage img; private IntroURL introURL; /** * @param element */ IntroLink(Element element, Bundle bundle, String base) { super(element, bundle); url = getAttribute(element, ATT_URL); label = getAttribute(element, ATT_LABEL); url = ModelUtil.resolveURL(base, url, bundle); if (url != null) { // check the URL. IntroURLParser parser = new IntroURLParser(url); if (parser.hasIntroUrl()) introURL = parser.getIntroURL(); } // There should be at most one img element. NodeList imgElements = element.getElementsByTagName(TAG_IMG); if (imgElements.getLength() > 0) { img = new IntroImage((Element) imgElements.item(0), getBundle(), base); img.setParent(this); } } /** * @return Returns the label. */ public String getLabel() { IntroModelRoot root = getModelRoot(); if (root!=null) { return root.resolveVariables(label); } return label; } /** * @return Returns the url. */ public String getUrl() { return url; } /** * Retruns an IntroURL instance if link has a valid intro url. Returns null * otherwise. * * @return Returns the introURL. */ public IntroURL getIntroURL() { return introURL; } @Override public int getType() { return AbstractIntroElement.LINK; } /** * @return Returns the img. */ public IntroImage getImg() { return img; } /** * Deep copy since class has mutable objects. */ @Override public Object clone() throws CloneNotSupportedException { IntroLink clone = (IntroLink) super.clone(); if (img != null) { IntroImage cloneIntroImage = (IntroImage) img.clone(); cloneIntroImage.setParent(clone); clone.img = cloneIntroImage; } // no need to clobe IntroURL. return clone; } }