| /******************************************************************************* |
| * Copyright (c) 2002, 2009 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 |
| * Jens Lukowski/Innoopract - initial renaming/restructuring |
| * Jesper Steen Moller - jesper@selskabet.org - bug 112284 |
| * |
| *******************************************************************************/ |
| package org.eclipse.wst.xml.core.internal.catalog; |
| |
| import java.net.MalformedURLException; |
| import java.net.URI; |
| import java.net.URISyntaxException; |
| import java.net.URL; |
| import java.util.Collection; |
| import java.util.HashMap; |
| import java.util.Map; |
| |
| import org.eclipse.wst.xml.core.internal.catalog.provisional.ICatalog; |
| import org.eclipse.wst.xml.core.internal.catalog.provisional.ICatalogElement; |
| |
| |
| public class CatalogElement implements ICatalogElement |
| { |
| int type; |
| |
| String id; |
| |
| String base; |
| |
| Map attributes = new HashMap(); |
| |
| ICatalog ownerCatalog; |
| |
| public CatalogElement(int aType) |
| { |
| super(); |
| type = aType; |
| } |
| |
| public int getType() |
| { |
| return type; |
| } |
| |
| public String getBase() |
| { |
| return base; |
| } |
| |
| public void setBase(String base) |
| { |
| this.base = base; |
| } |
| |
| public String getAttributeValue(String name) |
| { |
| return (String) attributes.get(name); |
| } |
| |
| public void setAttributeValue(String name, String value) |
| { |
| attributes.put(name, value); |
| } |
| |
| public String[] getAttributes() |
| { |
| Collection c = attributes.values(); |
| String[] result = new String[c.size()]; |
| attributes.keySet().toArray(result); |
| return result; |
| } |
| |
| public String getId() |
| { |
| return id; |
| } |
| |
| public void setId(String id) |
| { |
| this.id = id; |
| } |
| |
| public ICatalog getOwnerCatalog() |
| { |
| return ownerCatalog; |
| } |
| |
| public void setOwnerCatalog(ICatalog catalog) |
| { |
| this.ownerCatalog = catalog; |
| } |
| |
| protected static String makeAbsolute(String baseLocation, String location) |
| { |
| URL local = null; |
| location = location.replace('\\', '/'); |
| try |
| { |
| URL baseURL = new URL(baseLocation); |
| local = new URL(baseURL, location); |
| } catch (MalformedURLException e) |
| { |
| } |
| |
| if (local != null) |
| { |
| return local.toString(); |
| } else |
| { |
| return location; |
| } |
| } |
| |
| public String getAbsolutePath(String path) |
| { |
| try |
| { |
| URI uri = new URI(path); |
| if (uri.isAbsolute()) |
| { |
| return path; |
| } |
| } catch (URISyntaxException e) |
| { |
| } |
| |
| if (this.base != null && !this.base.equals("")) //$NON-NLS-1$ |
| { |
| return makeAbsolute(base, path); |
| } |
| |
| String result = path; |
| Catalog catalog = (Catalog) getOwnerCatalog(); |
| if (catalog != null) |
| { |
| String base = catalog.getBase(); |
| if (base == null || base.equals("")) //$NON-NLS-1$ |
| { |
| base = catalog.getLocation(); |
| } |
| result = makeAbsolute(base, path); |
| } |
| return result; |
| } |
| |
| /* |
| * Since we don't have events notifications for entry properties, clone() |
| * could allow to copy and edit entry and then replace it in catalog. Entry |
| * replacement will signal ICatalogEvent @return |
| */ |
| public Object clone() |
| { |
| ICatalogElement element = ownerCatalog.createCatalogElement(type); |
| String[] attributes = getAttributes(); |
| for (int i = 0; i < attributes.length; i++) |
| { |
| String attrName = attributes[i]; |
| String attrValue = getAttributeValue(attrName); |
| element.setAttributeValue(attrName, attrValue); |
| } |
| element.setOwnerCatalog(ownerCatalog); |
| element.setId(id); |
| element.setBase(base); |
| return element; |
| } |
| |
| |
| } |