/*******************************************************************************
* 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.common.meta.impl;
import java.util.*;
import org.w3c.dom.*;
import org.jboss.tools.common.meta.*;
public abstract class XMetaElementImpl implements XMetaElement, XMetaDataConstants {
protected String name;
protected String displayName;
protected Properties p = null;
public XMetaElementImpl() {}
public XModelMetaData getMetaModel() {
return XModelMetaDataImpl.getInstance();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDisplayName() {
return displayName == null ? getName() : displayName;
}
public void setDisplayName(String dname) {
displayName = dname;
}
public abstract void load(Element el);
public final String expand(String parameter, String mapping) {
if(parameter == null) return null;
if(parameter.startsWith("%")) { //$NON-NLS-1$
int j = parameter.length() - 1;
XMapping m = getMetaModel().getMapping(mapping);
if(m == null) return null;
parameter = m.getValue(parameter.substring(1, j));
}
return parameter;
}
public String getProperty(String name) {
return (p == null) ? null : p.getProperty(name);
}
protected void loadProperties(Element el) {
p = parseProperties(el.getAttribute("PROPERTIES")); //$NON-NLS-1$
}
protected static Properties parseProperties(String ps) {
if(ps == null || ps.length() == 0) return null;
Properties p = new Properties();
StringTokenizer st = new StringTokenizer(ps, ";,"); //$NON-NLS-1$
while(st.hasMoreElements()) {
String t = st.nextToken();
int i = t.indexOf('=');
if(i < 0) continue;
String n = t.substring(0, i).trim();
String v = t.substring(i + 1).trim();
p.setProperty(n, v);
}
return p;
}
}