/*******************************************************************************
* 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.key;
import java.util.*;
import org.jboss.tools.common.meta.XAttribute;
import org.jboss.tools.common.meta.XModelEntity;
import org.jboss.tools.common.meta.action.XActionItem;
import org.jboss.tools.common.meta.action.XAttributeData;
public class WizardKeys {
private static Properties keys = new Properties();
private static Properties labels = keys;
private static Properties common = keys;
static {
Locale locale = Locale.getDefault();
String localeString = locale.toString();
while(true) {
addNew(keys, KeyLoader.load(localeString));
if(localeString.length() == 0) break;
int i = localeString.indexOf('_');
localeString = (i < 0) ? "" : localeString.substring(0, i); //$NON-NLS-1$
}
}
private static void addNew(Properties target, Properties source) {
Enumeration it = source.keys();
while(it.hasMoreElements()) {
String n = it.nextElement().toString();
if(target.containsKey(n)) continue;
target.setProperty(n, source.getProperty(n));
}
}
public static String getHeader(String key) {
if(key == null) return null;
return keys.getProperty(key + ".WindowTitle"); //$NON-NLS-1$
}
public static String getTitle(String key) {
if(key == null) return null;
return keys.getProperty(key + ".Title"); //$NON-NLS-1$
}
public static String getMessage(String key) {
if(key == null) return null;
return keys.getProperty(key + ".Message"); //$NON-NLS-1$
}
public static String getLabelText(String entity, String attribute) {
String key = "" + entity + "." + attribute.replace(' ', '_'); //$NON-NLS-1$ //$NON-NLS-2$
return keys.getProperty(key);
}
public static String getLabelText(String key) {
return (key == null) ? null : labels.getProperty(key);
}
public static String getString(String key) {
if (key!=null) {
if (common.getProperty(key)!=null) {
return common.getProperty(key);
} else {
return null;
}
}
return "@NULL_KEY@"; //$NON-NLS-1$
//return (key == null) ? null : common.getProperty(key);
}
public static String getAttributeDisplayName(XAttributeData a, boolean build) {
String d = getAttributeDisplayName(a);
return (d != null || !build) ? d : toDisplayName(a.getAttribute().getName());
}
public static String getAttributeDisplayName(XAttributeData a) {
return getAttributeDisplayName(a.getAttribute());
}
public static String getAttributeDisplayName(XAttribute a, boolean build) {
String d = getAttributeDisplayName(a);
return (d != null || !build) ? d : toDisplayName(a.getName());
}
public static String getAttributeDisplayName(XAttribute a) {
String s = getLabelText(a.getModelEntity().getName(), a.getName());
if(s == null) {
String labelText = a.getModelEntity().getName() + "_" + a.getName(); //$NON-NLS-1$
s = getLabelText(labelText);
}
if(s == null) {
s = getLabelText(a.getModelEntity().getModule(), a.getName());
}
return s;
}
private static Set<String> LOWER_CASE_WORDS = new HashSet<String>();
private static Set<String> UPPER_CASE_WORDS = new HashSet<String>();
static {
String[] lcw = new String[]{"the", "web.xml", "for"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
String[] ucw = new String[]{"tld", "uri", "jsp", "html", "url", "jsf", "xml", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$
"id", "jms", "esb", "ftp", "jbr", "fs", "mep"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$
for (int i = 0; i < lcw.length; i++) LOWER_CASE_WORDS.add(lcw[i]);
for (int i = 0; i < ucw.length; i++) UPPER_CASE_WORDS.add(ucw[i]);
}
public static String toDisplayName(String n) {
if(n == null || n.length() == 0) return ""; //$NON-NLS-1$
StringTokenizer st = new StringTokenizer(n, " -", true); //$NON-NLS-1$
StringBuffer sb = new StringBuffer();
int k = st.countTokens();
for (int i = 0; i < k; i++) {
String t = st.nextToken();
if(UPPER_CASE_WORDS.contains(t)) {
sb.append(t.toUpperCase());
} else if(i > 0 && (t.length() < 3 || LOWER_CASE_WORDS.contains(t))) {
sb.append(t);
} else {
sb.append(t.substring(0, 1).toUpperCase()).append(t.substring(1));
}
}
return sb.toString();
}
/**
* Display name for menu item generated for meta declaration of action item.
* Several keys are checked in resources, the first found key is used.
* 1) Entity specific: %Entity name%.%Item name%.menu
* 2) Module specific: %Module name%.%Item name%.menu
* 3) Global: %Item name%.menu
* If no key is found, item.getDisplayName() is returned.
*
* @param item
* @param entity
* @return
*/
public static String getMenuItemDisplayName(XActionItem item, XModelEntity entity) {
String s = getDisplayValue(item, entity, ".", ".menu"); //$NON-NLS-1$ //$NON-NLS-2$
if(s != null) return s;
return item.getDisplayName();
}
public static String getHeader(XActionItem item, XModelEntity entity) {
String s = getDisplayValue(item, entity, "_", ".WindowTitle"); //$NON-NLS-1$ //$NON-NLS-2$
if(s != null) return s;
return item.getDisplayName();
}
public static String getTitle(XActionItem item, XModelEntity entity) {
String s = getDisplayValue(item, entity, "_", ".Title"); //$NON-NLS-1$ //$NON-NLS-2$
if(s != null) return s;
return item.getDisplayName();
}
/**
* Display value for action item generated for meta declaration of action item.
* Several keys are checked in resources, the first found key is used.
* 1) Entity specific: %Entity name% %separator% %Item name% %prefix%
* 2) Module specific: %Module name% %separator% %Item name% %prefix%
* 3) Global: %Item name% %prefix%
* If no key is found, null is returned.
*
* @param item
* @param entity
* @return
*/
public static String getDisplayValue(XActionItem item, XModelEntity entity, String separator, String suffix) {
if(entity != null) {
String key = entity.getName() + separator + item.getName() + suffix;
String s = keys.getProperty(key);
if(s != null) return s;
key = entity.getModule() + "." + item.getName() + suffix; //$NON-NLS-1$
s = keys.getProperty(key);
if(s != null) return s;
}
String key = item.getName() + suffix;
String s = keys.getProperty(key);
if(s != null) return s;
return null;
}
public static String getVisualListValue(XAttribute attr, String value) {
if(attr == null || value == null || value.length() == 0) return value;
String keyPart = toKey(value);
String module = attr.getModelEntity().getModule();
String key1 = module + "." + "lists." + keyPart; //$NON-NLS-1$ //$NON-NLS-2$
String result = WizardKeys.getString(key1);
if(result != null) return result;
String key2 = "lists." + keyPart; //$NON-NLS-1$
result = WizardKeys.getString(key2);
if(result != null) return result;
return value;
}
public static String toKey(String s) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if(c == '.' || Character.isJavaIdentifierPart(c)) {
sb.append(c);
} else {
sb.append('_');
}
}
return sb.toString();
}
}