/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ package Sirius.navigator.tools; /******************************************************************************* Copyright (c) : EIG (Environmental Informatics Group) http://www.htw-saarland.de/eig Prof. Dr. Reiner Guettler Prof. Dr. Ralf Denzer HTWdS Hochschule fuer Technik und Wirtschaft des Saarlandes Goebenstr. 40 66117 Saarbruecken Germany Programmers : Pascal Project : WuNDA 2 Filename : Version : 1.0 Purpose : Created : 03.08.2000 History : 10.04.2001 / ATTRIBUTE_NAME *******************************************************************************/ import Sirius.server.middleware.types.*; import Sirius.server.newuser.*; /** * DOCUMENT ME! * * @version $Revision$, $Date$ */ public class URLParameterizer extends StringParameterizer { //~ Static fields/initializers --------------------------------------------- private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(URLParameterizer.class); public static char OPEN_TAG = '$'; // NOI18N public static char CLOSE_TAG = '§'; // NOI18N public static char ARRAY_SEPARATOR = ';'; public static String CLASS_ID = "c.id"; // NOI18N public static String CLASS_NAME = "c.name"; // NOI18N public static String CLASS_ATTRIBUTE_ID = "c_a."; // NOI18N public static String CLASS_ATTRIBUTE_NAME = "c_a_name."; // NOI18N public static String OBJECT_ID = "o.id"; // NOI18N public static String OBJECT_NAME = "o.name"; // NOI18N public static String OBJECT_ATTRIBUTE_ID = "o_a."; // NOI18N public static String OBJECT_ATTRIBUTE_NAME = "o_a_name."; // NOI18N public static String USER_ID = "u.id"; // NOI18N public static String USER_NAME = "u.name"; // NOI18N public static String USER_LS_NAME = "u.ls_name"; // NOI18N public static String USER_ORDER_NUM = "u.order"; // NOI18N public static String USERGROUP_ID = "g.id"; // NOI18N public static String USERGROUP_NAME = "g.name"; // NOI18N public static String USERGROUP_LS_NAME = "g.ls_name"; // NOI18N //~ Methods ---------------------------------------------------------------- /** * DOCUMENT ME! * * @param url DOCUMENT ME! * @param classArray DOCUMENT ME! * @param objectArray DOCUMENT ME! * @param user DOCUMENT ME! * * @return DOCUMENT ME! * * @throws Exception DOCUMENT ME! */ public static String parameterizeURL(final String url, final MetaClass[] classArray, final MetaObject[] objectArray, final User user) throws Exception { return parameterizeString(url, getTokens(url), getValues(url, classArray, objectArray, user)); } /** * DOCUMENT ME! * * @param url DOCUMENT ME! * @param c DOCUMENT ME! * @param o DOCUMENT ME! * @param user DOCUMENT ME! * * @return DOCUMENT ME! * * @throws Exception DOCUMENT ME! */ public static String parameterizeURL(final String url, final MetaClass c, final MetaObject o, final User user) throws Exception { MetaClass[] _c = { c }; if (c == null) { _c = null; } MetaObject[] _o = { o }; if (o == null) { _o = null; } return parameterizeURL(url, _c, _o, user); } /** * DOCUMENT ME! * * @param url DOCUMENT ME! * * @return DOCUMENT ME! */ public static String[] getTokens(final String url) { return parseString(url, OPEN_TAG, CLOSE_TAG); } /** * DOCUMENT ME! * * @param url DOCUMENT ME! * @param classArray DOCUMENT ME! * @param objectArray DOCUMENT ME! * @param user DOCUMENT ME! * * @return DOCUMENT ME! * * @throws Exception DOCUMENT ME! */ public static String[] getValues(final String url, final MetaClass[] classArray, final MetaObject[] objectArray, final User user) throws Exception { final String[] tokens = getTokens(url); final String[] values = new String[tokens.length]; final Sirius.server.localserver.attribute.Attribute[] attributeArray = null; final UserGroup userGroup; if (user != null) { UserGroup tmpUserGroup = user.getUserGroup(); if (tmpUserGroup == null) { for (final UserGroup potentialUserGroup : user.getPotentialUserGroups()) { tmpUserGroup = potentialUserGroup; break; } } userGroup = tmpUserGroup; } else { userGroup = null; } for (int i = 0; i < tokens.length; i++) { // CLASS ... if ((classArray != null) && (classArray.length > 0) && (tokens[i].equals(CLASS_ID) || tokens[i].equals(CLASS_NAME) || (tokens[i].indexOf(CLASS_ATTRIBUTE_ID) != -1) || ((tokens[i].indexOf(CLASS_ATTRIBUTE_NAME) != -1) && (classArray != null) && (classArray.length > 0)))) { String value = null; for (int j = 0; j < classArray.length; j++) { value = getClassValue(classArray[j], tokens[i]); if (value != null) { if (values[i] != null) { values[i] += (ARRAY_SEPARATOR + value); } else { values[i] = value; } } } } // OBJECT ... else if ((objectArray != null) && (objectArray.length > 0) && (tokens[i].equals(OBJECT_ID) || tokens[i].equals(OBJECT_NAME) || (tokens[i].indexOf(OBJECT_ATTRIBUTE_ID) != -1) || ((tokens[i].indexOf(OBJECT_ATTRIBUTE_NAME) != -1) && (objectArray != null) && (objectArray.length > 0)))) { String value = null; for (int j = 0; j < objectArray.length; j++) { value = getObjectValue(objectArray[j], tokens[i]); // NavigatorLogger.printMessage(j + ": " + value); if (value != null) { if (values[i] != null) { values[i] += (ARRAY_SEPARATOR + value); } else { values[i] = value; } } } } // USER ... else if ((user != null) && tokens[i].equals(USER_ID)) { values[i] = String.valueOf(user.getId()); } else if ((user != null) && tokens[i].equals(USER_NAME)) { values[i] = user.getName(); } else if ((user != null) && tokens[i].equals(USER_LS_NAME)) { values[i] = user.getDomain(); } else if ((user != null) && tokens[i].equals(USER_ORDER_NUM)) { ; // values[i] = String.valueOf(user.getOder()); } // USERGROUP ... else if ((userGroup != null) && tokens[i].equals(USERGROUP_ID)) { values[i] = String.valueOf(userGroup.getId()); } else if ((userGroup != null) && tokens[i].equals(USERGROUP_NAME)) { values[i] = userGroup.getName(); } else if ((userGroup != null) && tokens[i].equals(USERGROUP_LS_NAME)) { values[i] = userGroup.getDomain(); } } return values; } /** * DOCUMENT ME! * * @param cls DOCUMENT ME! * @param clsToken DOCUMENT ME! * * @return DOCUMENT ME! */ public static String getClassValue(final MetaClass cls, final String clsToken) { final String value = null; /*Sirius.server.localserver.attribute.Attribute[] attributeArray = null; * * * if(clsToken.equals(CLASS_ID) && cls != null) { //if(value == null) value = * String.valueOf(cls.getID()); //else // value += (ARRAY_SEPARATOR + String.valueOf(cls.getID())); * } else if(clsToken.equals(CLASS_NAME) && cls != null) { //if(value == null) value = * cls.getName().trim(); //else // value += (ARRAY_SEPARATOR + cls.getName().trim()); } else * if(clsToken.indexOf(CLASS_ATTRIBUTE_ID) != -1 && cls != null) { attributeArray = cls.getAttribs(); * if(attributeArray != null && attributeArray.length > 0) { for(int k = 0; k < * attributeArray.length; k++) { int id = * Integer.parseInt(clsToken.substring(CLASS_ATTRIBUTE_ID.length(), clsToken.length())); * //NavigatorLogger.printMessage("Attribute: " + id + " : " + attributeArray[k].getID()); * if(attributeArray[k].getID() == id) { //if(value == null) value = * attributeArray[k].getValue().toString(); //else // value += (ARRAY_SEPARATOR + * attributeArray[k].getValue()); } } attributeArray = null; } } * else if(clsToken.indexOf(CLASS_ATTRIBUTE_NAME) != -1 && cls != null) { attributeArray = cls.getAttribs(); * if(attributeArray != null && attributeArray.length > 0) { for(int k = 0; k < * attributeArray.length; k++) { String name = * clsToken.substring(CLASS_ATTRIBUTE_NAME.length(), clsToken.length()); * if(attributeArray[k].getName().equals(name)) { //if(value == * null) value = attributeArray[k].getValue().toString(); //else // * value += (ARRAY_SEPARATOR + attributeArray[k].getValue()); } } * attributeArray = null; }}*/ return value; } /** * DOCUMENT ME! * * @param object DOCUMENT ME! * @param objectToken DOCUMENT ME! * * @return DOCUMENT ME! */ public static String getObjectValue(final MetaObject object, final String objectToken) { String value = null; Sirius.server.localserver.attribute.Attribute[] attributeArray = null; if (objectToken.equals(OBJECT_ID) && (object != null)) { // if(value == null) value = String.valueOf(object.getID()); // else // value += (ARRAY_SEPARATOR + String.valueOf(object.getID())); } else if (objectToken.equals(OBJECT_NAME) && (object != null)) { // if(value == null) value = object.getName().trim(); // else // value += (ARRAY_SEPARATOR + object.getName().trim()); } else if ((objectToken.indexOf(OBJECT_ATTRIBUTE_ID) != -1) && (object != null)) { attributeArray = object.getAttribs(); if ((attributeArray != null) && (attributeArray.length > 0)) { for (int k = 0; k < attributeArray.length; k++) { final int id = Integer.parseInt(objectToken.substring( OBJECT_ATTRIBUTE_ID.length(), objectToken.length())); if (attributeArray[k].getID().equalsIgnoreCase(id + "")) // NOI18N { // if(value == null) value = attributeArray[k].getValue().toString(); // else value += (ARRAY_SEPARATOR + attributeArray[k].getValue()); } } attributeArray = null; } } else if ((objectToken.indexOf(OBJECT_ATTRIBUTE_NAME) != -1) && (object != null)) { attributeArray = object.getAttribs(); if ((attributeArray != null) && (attributeArray.length > 0)) { for (int k = 0; k < attributeArray.length; k++) { final String name = objectToken.substring(OBJECT_ATTRIBUTE_NAME.length(), objectToken.length()); if (attributeArray[k].getName().equalsIgnoreCase(name)) { // if(value == null) value = attributeArray[k].getValue().toString(); // else value += (ARRAY_SEPARATOR + attributeArray[k].getValue()); } } attributeArray = null; } } return value; } /* * public static void main(String[] args) { String parseThis = * "http://134.96.158.150:8080/sachdatenabfrage/abfrage1.pl?benutzer=$u.name�&heimat=$u.ls_name�&thema=$c.id�&objectArray=$o.id�&attribut=$o_a.5�"; * NavigatorLogger.printMessage(parseThis); String[] tokens = StringParameterizer.parseString(parseThis, '$' , * '�' ); for(int i = 0; i < tokens.length; i++) NavigatorLogger.printMessage("Token " + i + ": " + * tokens[i]); int num = Integer.parseInt(tokens[4].substring(OBJECT_ATTRIBUTE_ID.length(), * tokens[4].length())); String values[] = new String[] {"Penner", "unter der Bruecke", "besoffen", "flasche", * "schmutzig"}; NavigatorLogger.printMessage("num: " + num); * //NavigatorLogger.printMessage(tokens[4].indexOf(OBJECT_ATTRIBUTE_ID)); try { * NavigatorLogger.printMessage(StringParameterizer.parameterizeString(parseThis, tokens, values)); } * catch(Throwable t) { t.printStackTrace(); }}*/ }