Example usage for java.lang StringBuffer indexOf

List of usage examples for java.lang StringBuffer indexOf

Introduction

In this page you can find the example usage for java.lang StringBuffer indexOf.

Prototype

@Override
public int indexOf(String str) 

Source Link

Usage

From source file:cc.siara.csv_ml_demo.MainActivity.java

/**
 * Evaluates given XPath from Input box against Document generated by
 * parsing csv_ml in input box and sets value or node list to output box.
 *//*  w w  w . j  av a  2  s.  c o m*/
void processXPath() {
    EditText etInput = (EditText) findViewById(R.id.etInput);
    EditText etXPath = (EditText) findViewById(R.id.etXPath);
    CheckBox cbPretty = (CheckBox) findViewById(R.id.cbPretty);
    XPath xpath = XPathFactory.newInstance().newXPath();
    MultiLevelCSVParser parser = new MultiLevelCSVParser();
    Document doc = null;
    try {
        doc = parser.parseToDOM(new StringReader(etInput.getText().toString()), false);
    } catch (IOException e1) {
        e1.printStackTrace();
    }
    if (doc == null)
        return;
    StringBuffer out_str = new StringBuffer();
    try {
        XPathExpression expr = xpath.compile(etXPath.getText().toString());
        try {
            Document outDoc = Util.parseXMLToDOM("<output></output>");
            Element rootElement = outDoc.getDocumentElement();
            NodeList ret = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);
            for (int i = 0; i < ret.getLength(); i++) {
                Object o = ret.item(i);
                if (o instanceof String) {
                    out_str.append(o);
                } else if (o instanceof Node) {
                    Node n = (Node) o;
                    short nt = n.getNodeType();
                    switch (nt) {
                    case Node.TEXT_NODE:
                    case Node.ATTRIBUTE_NODE:
                    case Node.CDATA_SECTION_NODE: // Only one value gets
                                                  // evaluated?
                        if (out_str.length() > 0)
                            out_str.append(',');
                        if (nt == Node.ATTRIBUTE_NODE)
                            out_str.append(n.getNodeValue());
                        else
                            out_str.append(n.getTextContent());
                        break;
                    case Node.ELEMENT_NODE:
                        rootElement.appendChild(outDoc.importNode(n, true));
                        break;
                    }
                }
            }
            if (out_str.length() > 0) {
                rootElement.setTextContent(out_str.toString());
                out_str.setLength(0);
            }
            out_str.append(Util.docToString(outDoc, true));
        } catch (Exception e) {
            // Thrown most likely because the given XPath evaluates to a
            // string
            out_str.append(expr.evaluate(doc));
        }
    } catch (XPathExpressionException e) {
        e.printStackTrace();
    }
    if (out_str.length() > 5 && out_str.substring(0, 5).equals("<?xml"))
        out_str.delete(0, out_str.indexOf(">") + 1);
    EditText etOutput = (EditText) findViewById(R.id.etOutput);
    etOutput.setText(out_str.toString());
    // tfOutputSize.setText(String.valueOf(xmlString.length()));
}

From source file:com.codegarden.nativenavigation.JuceActivity.java

public static final HTTPStream createHTTPStream(String address, boolean isPost, byte[] postData, String headers,
        int timeOutMs, int[] statusCode, StringBuffer responseHeaders, int numRedirectsToFollow,
        String httpRequestCmd) {/*from  ww  w . jav a  2  s.  c om*/
    // timeout parameter of zero for HttpUrlConnection is a blocking connect (negative value for juce::URL)
    if (timeOutMs < 0)
        timeOutMs = 0;
    else if (timeOutMs == 0)
        timeOutMs = 30000;

    // headers - if not empty, this string is appended onto the headers that are used for the request. It must therefore be a valid set of HTML header directives, separated by newlines.
    // So convert headers string to an array, with an element for each line
    String headerLines[] = headers.split("\\n");

    for (;;) {
        try {
            HttpURLConnection connection = (HttpURLConnection) (new URL(address).openConnection());

            if (connection != null) {
                try {
                    connection.setInstanceFollowRedirects(false);
                    connection.setConnectTimeout(timeOutMs);
                    connection.setReadTimeout(timeOutMs);

                    // Set request headers
                    for (int i = 0; i < headerLines.length; ++i) {
                        int pos = headerLines[i].indexOf(":");

                        if (pos > 0 && pos < headerLines[i].length()) {
                            String field = headerLines[i].substring(0, pos);
                            String value = headerLines[i].substring(pos + 1);

                            if (value.length() > 0)
                                connection.setRequestProperty(field, value);
                        }
                    }

                    connection.setRequestMethod(httpRequestCmd);
                    if (isPost) {
                        connection.setDoOutput(true);

                        if (postData != null) {
                            OutputStream out = connection.getOutputStream();
                            out.write(postData);
                            out.flush();
                        }
                    }

                    HTTPStream httpStream = new HTTPStream(connection, statusCode, responseHeaders);

                    // Process redirect & continue as necessary
                    int status = statusCode[0];

                    if (--numRedirectsToFollow >= 0
                            && (status == 301 || status == 302 || status == 303 || status == 307)) {
                        // Assumes only one occurrence of "Location"
                        int pos1 = responseHeaders.indexOf("Location:") + 10;
                        int pos2 = responseHeaders.indexOf("\n", pos1);

                        if (pos2 > pos1) {
                            String newLocation = responseHeaders.substring(pos1, pos2);
                            // Handle newLocation whether it's absolute or relative
                            URL baseUrl = new URL(address);
                            URL newUrl = new URL(baseUrl, newLocation);
                            String transformedNewLocation = newUrl.toString();

                            if (transformedNewLocation != address) {
                                address = transformedNewLocation;
                                // Clear responseHeaders before next iteration
                                responseHeaders.delete(0, responseHeaders.length());
                                continue;
                            }
                        }
                    }

                    return httpStream;
                } catch (Throwable e) {
                    connection.disconnect();
                }
            }
        } catch (Throwable e) {
        }

        return null;
    }
}

From source file:org.exoplatform.calendar.webui.popup.UIEventForm.java

protected List<Reminder> getEventReminders(Date fromDateTime, List<Reminder> currentReminders)
        throws Exception {
    List<Reminder> reminders = new ArrayList<Reminder>();
    if (getEmailReminder()) {
        Reminder email = new Reminder();
        if (currentReminders != null) {
            for (Reminder rm : currentReminders) {
                if (rm.getReminderType().equals(Reminder.TYPE_EMAIL)) {
                    email = rm;/*from  w w  w .j a v a  2 s .co m*/
                    break;
                }
            }
        }
        email.setReminderType(Reminder.TYPE_EMAIL);
        email.setReminderOwner(CalendarUtils.getCurrentUser());
        email.setAlarmBefore(Long.parseLong(getEmailRemindBefore()));
        StringBuffer sbAddress = new StringBuffer();
        for (String s : getEmailAddress().replaceAll(CalendarUtils.SEMICOLON, CalendarUtils.COMMA)
                .split(CalendarUtils.COMMA)) {
            s = s.trim();
            if (sbAddress.indexOf(s) < 0) {
                if (sbAddress.length() > 0)
                    sbAddress.append(CalendarUtils.COMMA);
                sbAddress.append(s);
            }
        }
        email.setEmailAddress(sbAddress.toString());
        email.setRepeate(isEmailRepeat());
        email.setRepeatInterval(Long.parseLong(getEmailRepeatInterVal()));
        email.setFromDateTime(fromDateTime);
        if (!CalendarUtils.isEmpty(email.getEmailAddress()))
            reminders.add(email);
    }
    if (getPopupReminder()) {
        Reminder popup = new Reminder();
        if (currentReminders != null) {
            for (Reminder rm : currentReminders) {
                if (rm.getReminderType().equals(Reminder.TYPE_POPUP)) {
                    popup = rm;
                    break;
                }
            }
        }
        StringBuffer sb = new StringBuffer();
        boolean isExist = false;
        if (!isExist) {
            if (sb.length() > 0)
                sb.append(CalendarUtils.COMMA);
            sb.append(CalendarUtils.getCurrentUser());
        }
        popup.setReminderOwner(sb.toString());
        popup.setReminderType(Reminder.TYPE_POPUP);
        popup.setAlarmBefore(Long.parseLong(getPopupReminderTime()));
        popup.setRepeate(isPopupRepeat());
        popup.setRepeatInterval(Long.parseLong(getPopupRepeatInterVal()));
        popup.setFromDateTime(fromDateTime);
        reminders.add(popup);
    }
    return reminders;
}

From source file:org.josso.selfservices.password.generator.PasswordGeneratorImpl.java

/**
 * The real password generation is performed in this method
 *
 * @param size     the length of the password
 * @param pw_flags the settings for the password
 * @return the newly created password/*from   ww  w . ja  v  a  2  s .  c o m*/
 */
private String phonemes(int size, int pw_flags) {
    int c, i, len, flags, feature_flags;
    int prev, should_be;
    boolean first;
    String str;
    char ch;
    StringBuffer buf = new StringBuffer();

    do {
        buf.delete(0, buf.length());
        feature_flags = pw_flags;
        c = 0;
        prev = 0;
        should_be = 0;
        first = true;
        should_be = random.nextBoolean() ? VOWEL : CONSONANT;

        while (c < size) {

            i = random.nextInt(PW_ELEMENTS.length);
            str = PW_ELEMENTS[i].getValue();
            len = str.length();
            flags = PW_ELEMENTS[i].getType();
            /* Filter on the basic type of the next element */
            if ((flags & should_be) == 0) {
                continue;
            }
            /* Handle the NOT_FIRST flag */
            if (first && ((flags & NOT_FIRST) != 0))
                continue;
            /* Don't allow VOWEL followed a Vowel/Dipthong pair */
            if (((prev & VOWEL) != 0) && ((flags & VOWEL) != 0) && ((flags & DIPTHONG) != 0))
                continue;
            /* Don't allow us to overflow the buffer */
            if (len > size - c)
                continue;
            /*
             * OK, we found an element which matches our criteria, let's do
             * it!
             */
            buf.append(str);

            /* Handle PW_UPPERS */
            if ((pw_flags & PW_UPPERS) != 0) {
                if ((first || ((flags & CONSONANT) != 0)) && (random.nextInt(10) < 2)) {
                    int lastChar = buf.length() - 1;
                    buf.setCharAt(lastChar, Character.toUpperCase(buf.charAt(lastChar)));
                    feature_flags &= ~PW_UPPERS;
                }
            }

            c += len;
            /* Handle the AMBIGUOUS flag */
            if ((pw_flags & PW_AMBIGUOUS) != 0) {
                int k = -1;
                for (int j = 0; j < PW_AMBIGUOUS_SYMBOLS.length(); j++) {
                    k = buf.indexOf(String.valueOf(PW_AMBIGUOUS_SYMBOLS.charAt(j)));
                    if (k != -1)
                        break;
                }
                if (k != -1) {
                    buf.delete(k, buf.length());
                    c = buf.length();
                }
            }

            /* Time to stop? */
            if (c >= size)
                break;

            /*
             * Handle PW_DIGITS
             */
            if ((pw_flags & PW_DIGITS) != 0) {
                if (!first && (random.nextInt(10) < 3)) {
                    do {
                        ch = (new Integer(random.nextInt(10))).toString().charAt(0);
                    } while (((pw_flags & PW_AMBIGUOUS) != 0) && (PW_AMBIGUOUS_SYMBOLS.indexOf(ch) != -1));
                    c++;
                    buf = buf.append(ch);
                    feature_flags &= ~PW_DIGITS;

                    first = true;
                    prev = 0;
                    should_be = random.nextBoolean() ? VOWEL : CONSONANT;
                    continue;
                }
            }

            /*
             * OK, figure out what the next element should be
             */
            if (should_be == CONSONANT) {
                should_be = VOWEL;
            } else { /* should_be == VOWEL */
                if (((prev & VOWEL) != 0) || ((flags & DIPTHONG) != 0) || (random.nextInt(10) > 3))
                    should_be = CONSONANT;
                else
                    should_be = VOWEL;
            }
            prev = flags;
            first = false;

            /* Handle PW_SYMBOLS */
            if ((pw_flags & PW_SYMBOLS) != 0) {
                if (!first && (random.nextInt(10) < 2)) {
                    do {
                        ch = PW_SPECIAL_SYMBOLS.charAt(random.nextInt(PW_SPECIAL_SYMBOLS.length()));
                    } while (((pw_flags & PW_AMBIGUOUS) != 0) && (PW_AMBIGUOUS_SYMBOLS.indexOf(ch) != -1));
                    c++;
                    buf = buf.append(ch);
                    feature_flags &= ~PW_SYMBOLS;
                }
            }

        }
    } while ((feature_flags & (PW_UPPERS | PW_DIGITS | PW_SYMBOLS)) != 0);

    return buf.toString();
}

From source file:lcmc.cluster.ui.ClusterBrowser.java

public void parseClusterOutput(final String output, final StringBuffer clusterStatusOutput, final Host host,
        final CountDownLatch firstTime, final Application.RunMode runMode) {
    final ClusterStatus clusterStatus0 = this.clusterStatus;
    clStatusLock();/*  w w  w. j a  v  a2  s. co m*/
    if (crmStatusCanceledByUser || clusterStatus0 == null) {
        clStatusUnlock();
        firstTime.countDown();
        return;
    }
    if (output == null || "".equals(output)) {
        clusterStatus0.setOnlineNode(host.getName(), "no");
        setCrmStatus(host, false);
        firstTime.countDown();
    } else {
        // TODO: if we get ERROR:... show it somewhere
        clusterStatusOutput.append(output);
        /* removes the string from the output. */
        int s = clusterStatusOutput.indexOf(RESET_STRING);
        while (s >= 0) {
            clusterStatusOutput.delete(s, s + RESET_STRING_LEN);
            s = clusterStatusOutput.indexOf(RESET_STRING);
        }
        if (clusterStatusOutput.length() > 12) {
            final String e = clusterStatusOutput.substring(clusterStatusOutput.length() - 12);
            if (e.trim().equals("---done---")) {
                final int i = clusterStatusOutput.lastIndexOf("---start---");
                if (i >= 0) {
                    if (clusterStatusOutput.indexOf("is stopped") >= 0) {
                        /* TODO: heartbeat's not running. */
                    } else {
                        final String status = clusterStatusOutput.substring(i);
                        clusterStatusOutput.delete(0, clusterStatusOutput.length());
                        if (CLUSTER_STATUS_ERROR.equals(status)) {
                            final boolean oldStatus = host.isCrmStatusOk();
                            clusterStatus0.setOnlineNode(host.getName(), "no");
                            setCrmStatus(host, false);
                            if (oldStatus) {
                                crmGraph.repaint();
                            }
                        } else {
                            if (clusterStatus0.parseStatus(status)) {
                                LOG.debug1("processClusterOutput: host: " + host.getName());
                                final ServicesInfo ssi = servicesInfo;
                                rscDefaultsInfo.setParameters(clusterStatus0.getRscDefaultsValuePairs());
                                ssi.setGlobalConfig(clusterStatus0);
                                resourceUpdaterProvider.get().updateAllResources(ssi, ssi.getBrowser(),
                                        clusterStatus0, runMode);
                                if (firstTime.getCount() == 1) {
                                    /* one more time so that id-refs work.*/
                                    resourceUpdaterProvider.get().updateAllResources(ssi, ssi.getBrowser(),
                                            clusterStatus0, runMode);
                                }
                                treeMenuController.repaintMenuTree();
                                clusterHostsInfo.updateTable(ClusterHostsInfo.MAIN_TABLE);
                            }
                            final String online = clusterStatus0.isOnlineNode(host.getName());
                            if ("yes".equals(online)) {
                                setCrmStatus(host, true);
                                setCrmStatus();
                            } else {
                                setCrmStatus(host, false);
                            }
                        }
                    }
                    firstTime.countDown();
                }
            }
        }
        Tools.chomp(clusterStatusOutput);
    }
    clStatusUnlock();
}

From source file:com.juce.JuceAppActivity.java

public static final HTTPStream createHTTPStream (String address, boolean isPost, byte[] postData,
                                                 String headers, int timeOutMs, int[] statusCode,
                                                 StringBuffer responseHeaders, int numRedirectsToFollow,
                                                 String httpRequestCmd)
{
    // timeout parameter of zero for HttpUrlConnection is a blocking connect (negative value for juce::URL)
    if (timeOutMs < 0)
        timeOutMs = 0;//  w w  w.  ja v  a2 s.co m
    else if (timeOutMs == 0)
        timeOutMs = 30000;

    // headers - if not empty, this string is appended onto the headers that are used for the request. It must therefore be a valid set of HTML header directives, separated by newlines.
    // So convert headers string to an array, with an element for each line
    String headerLines[] = headers.split("\\n");

    for (;;)
    {
        try
        {
            HttpURLConnection connection = (HttpURLConnection) (new URL(address).openConnection());

            if (connection != null)
            {
                try
                {
                    connection.setInstanceFollowRedirects (false);
                    connection.setConnectTimeout (timeOutMs);
                    connection.setReadTimeout (timeOutMs);

                    // Set request headers
                    for (int i = 0; i < headerLines.length; ++i)
                    {
                        int pos = headerLines[i].indexOf (":");

                        if (pos > 0 && pos < headerLines[i].length())
                        {
                            String field = headerLines[i].substring (0, pos);
                            String value = headerLines[i].substring (pos + 1);

                            if (value.length() > 0)
                                connection.setRequestProperty (field, value);
                        }
                    }

                    connection.setRequestMethod (httpRequestCmd);
                    if (isPost)
                    {
                        connection.setDoOutput (true);

                        if (postData != null)
                        {
                            OutputStream out = connection.getOutputStream();
                            out.write(postData);
                            out.flush();
                        }
                    }

                    HTTPStream httpStream = new HTTPStream (connection, statusCode, responseHeaders);

                    // Process redirect & continue as necessary
                    int status = statusCode[0];

                    if (--numRedirectsToFollow >= 0
                         && (status == 301 || status == 302 || status == 303 || status == 307))
                    {
                        // Assumes only one occurrence of "Location"
                        int pos1 = responseHeaders.indexOf ("Location:") + 10;
                        int pos2 = responseHeaders.indexOf ("\n", pos1);

                        if (pos2 > pos1)
                        {
                            String newLocation = responseHeaders.substring(pos1, pos2);
                            // Handle newLocation whether it's absolute or relative
                            URL baseUrl = new URL (address);
                            URL newUrl = new URL (baseUrl, newLocation);
                            String transformedNewLocation = newUrl.toString();

                            if (transformedNewLocation != address)
                            {
                                address = transformedNewLocation;
                                // Clear responseHeaders before next iteration
                                responseHeaders.delete (0, responseHeaders.length());
                                continue;
                            }
                        }
                    }

                    return httpStream;
                }
                catch (Throwable e)
                {
                    connection.disconnect();
                }
            }
        }
        catch (Throwable e) {}

        return null;
    }
}

From source file:lcmc.gui.ClusterBrowser.java

/** Process output from cluster. */
void processClusterOutput(final String output, final StringBuffer clusterStatusOutput, final Host host,
        final CountDownLatch firstTime, final boolean testOnly) {
    final ClusterStatus clStatus = clusterStatus;
    clStatusLock();//from  ww w.  j  av  a  2 s.c  o m
    if (clStatusCanceled || clStatus == null) {
        clStatusUnlock();
        firstTime.countDown();
        return;
    }
    if (output == null || "".equals(output)) {
        clStatus.setOnlineNode(host.getName(), "no");
        setClStatus(host, false);
        firstTime.countDown();
    } else {
        // TODO: if we get ERROR:... show it somewhere
        clusterStatusOutput.append(output);
        /* removes the string from the output. */
        int s = clusterStatusOutput.indexOf(RESET_STRING);
        while (s >= 0) {
            clusterStatusOutput.delete(s, s + RESET_STRING_LEN);
            s = clusterStatusOutput.indexOf(RESET_STRING);
        }
        if (clusterStatusOutput.length() > 12) {
            final String e = clusterStatusOutput.substring(clusterStatusOutput.length() - 12);
            if (e.trim().equals("---done---")) {
                final int i = clusterStatusOutput.lastIndexOf("---start---");
                if (i >= 0) {
                    if (clusterStatusOutput.indexOf("is stopped") >= 0) {
                        /* TODO: heartbeat's not running. */
                    } else {
                        final String status = clusterStatusOutput.substring(i);
                        clusterStatusOutput.delete(0, clusterStatusOutput.length());
                        if (CLUSTER_STATUS_ERROR.equals(status)) {
                            final boolean oldStatus = host.isClStatus();
                            clStatus.setOnlineNode(host.getName(), "no");
                            setClStatus(host, false);
                            if (oldStatus) {
                                crmGraph.repaint();
                            }
                        } else {
                            if (clStatus.parseStatus(status)) {
                                Tools.debug(this, "update cluster status: " + host.getName(), 1);
                                final ServicesInfo ssi = servicesInfo;
                                rscDefaultsInfo.setParameters(clStatus.getRscDefaultsValuePairs());
                                ssi.setGlobalConfig(clStatus);
                                ssi.setAllResources(clStatus, testOnly);
                                if (firstTime.getCount() == 1) {
                                    /* one more time so that id-refs work.*/
                                    ssi.setAllResources(clStatus, testOnly);
                                }
                                repaintTree();
                                clusterHostsInfo.updateTable(ClusterHostsInfo.MAIN_TABLE);
                            }
                            final String online = clStatus.isOnlineNode(host.getName());
                            if ("yes".equals(online)) {
                                setClStatus(host, true);
                                setClStatus();
                            } else {
                                setClStatus(host, false);
                            }
                        }
                    }
                    firstTime.countDown();
                }
            }
        }
        Tools.chomp(clusterStatusOutput);
    }
    clStatusUnlock();
}

From source file:org.ecoinformatics.datamanager.database.DelimitedReader.java

private String[] processQuoteCharacterOneRowData(String oneRowData) throws Exception {
    String[] elements = null;//from  ww w.jav  a 2  s.co  m
    Vector elementsVector = new Vector();
    if (oneRowData == null) {
        return elements;
    }
    quoteCharacter = transferQuoteCharacter(quoteCharacter);
    char quote = '#';
    boolean quoted = false;
    if (quoteCharacter != null) {
        quoted = true;
        quote = quoteCharacter.charAt(0);
    }
    char literal = '/';
    boolean literaled = false;
    if (literalCharacter != null) {
        literaled = true;
        literal = literalCharacter.charAt(0);
    }
    if (literaled && literalCharacter.length() != 1) {
        throw new Exception("Literal Character length should be 1 character in EML");
    }
    char currentChar = '2';
    StringBuffer fieldData = new StringBuffer();
    int length = oneRowData.length();
    int priviousDelimiterIndex = -2;
    int currentDelimiterIndex = -2;
    int delimiterLength = delimiter.length();
    boolean startQuote = false;
    boolean delimiterAtEnd = false;
    //this string buffer is only for deleting if hit a delimiter
    StringBuffer delimiterStorage = new StringBuffer(delimiter.length());
    for (int i = 0; i < length; i++) {
        currentChar = oneRowData.charAt(i);
        //System.out.println("current char is "+currentChar);
        fieldData.append(currentChar);
        if (i < delimiterLength) {
            delimiterStorage.append(currentChar);
        } else {
            //delimiterStorage.deleteCharAt(position);
            delimiterStorage = shiftBuffer(delimiterStorage, currentChar);
        }
        //System.out.println("current delimiter storage content is "+delimiterStorage.toString());
        //System.out.println("currnet value in the string buffer is "+fieldData.toString());
        // we should check if there is quoteCharacter in the string.
        if (quoted && currentChar == quote) {
            char previousChar = '1';
            boolean escapingQuote = false;
            // check if this quote is escaped
            if (literaled) {
                if ((i - 1) >= 0) {
                    previousChar = oneRowData.charAt(i - 1);
                    if (previousChar == literal) {
                        escapingQuote = true;
                        // delette the literal character
                        if (!includeLiteralCharacter) {
                            //if we don't want literal character in the data,
                            //we should delete literal character.
                            int fieldLength = fieldData.length();
                            if ((fieldLength - 1 - 1) >= 0) {
                                fieldData.deleteCharAt(fieldLength - 1 - 1);
                            }
                        }
                    }
                }
            }
            if (!escapingQuote) {
                if (!startQuote) {
                    //System.out.println("start quote");
                    startQuote = true;
                } else {
                    //System.out.println("end quote");
                    // at end of quote
                    //put string buffers value into vector and reset string buffer
                    startQuote = false;

                }
            }

        }

        //found a delimiter
        if (delimiterStorage.indexOf(delimiter) != -1 && !startQuote) {

            //check if there is literal character before the delimiter,
            //if does, this we should skip this delmiter
            int indexOfCharBeforeDelimiter = i - delimiterLength;
            boolean escapeDelimiter = false;
            if (literaled && indexOfCharBeforeDelimiter >= 0) {
                char charBeforeDelimiter = oneRowData.charAt(indexOfCharBeforeDelimiter);
                ////there is a literal character before delimiter we should skip this demlimiter
                if (charBeforeDelimiter == literal) {
                    if (!includeLiteralCharacter) {
                        //if we don't want literal character in the data,
                        //we should delete literal character.
                        int fieldLength = fieldData.length();
                        if ((fieldLength - delimiterLength - 1) >= 0) {
                            fieldData.deleteCharAt(fieldLength - delimiterLength - 1);
                        }
                    }
                    escapeDelimiter = true;
                    continue;
                }
            }

            // check if the delimiter is in the end of the string
            if (i == (length - 1) && !startQuote && !escapeDelimiter) {
                delimiterAtEnd = true;
            }

            ////here we should treat sequential delimiter as single delimiter
            if (collapseDelimiters) {
                priviousDelimiterIndex = currentDelimiterIndex;
                currentDelimiterIndex = i;
                //there is nothing between two delimiter, should skip it.
                if ((currentDelimiterIndex - priviousDelimiterIndex) == delimiterLength) {
                    //delete sequnced delimiter
                    fieldData = new StringBuffer();
                    continue;
                }
            }

            String value = "";
            int delimiterIndex = fieldData.lastIndexOf(delimiter);
            if (delimiterIndex == 0) {
                //this path means field data on has delimiter, no real data
                value = "";
            } else {
                value = fieldData.substring(0, delimiterIndex);

            }
            elementsVector.add(value);
            //reset string buffer fieldData
            fieldData = new StringBuffer();

        }
    }
    // if startQuote is true at the end, which means there is no close quote character in this row,
    // code should throw an exception
    if (startQuote) {
        throw new Exception("There is a un-closed quote in data file");
    }
    // add last field. If this string end of delimiter, we need add a ""
    // else, we need to add the value in string buffer.
    String lastFieldValue = null;
    if (delimiterAtEnd == true) {
        //this path means field data on has delimiter, no real data
        lastFieldValue = "";
    } else {
        lastFieldValue = fieldData.toString();

    }
    elementsVector.add(lastFieldValue);
    //transform vector to string array
    int size = elementsVector.size();
    elements = new String[size];
    for (int i = 0; i < size; i++) {
        elements[i] = (String) elementsVector.elementAt(i);
    }
    return elements;
}

From source file:org.silverpeas.components.kmelia.servlets.KmeliaRequestRouter.java

/**
 * This method has to be implemented by the component request rooter it has to compute a
 * destination page/*from  ww  w  .j  av a  2 s . c  o  m*/
 * @param function The entering request function ( : "Main.jsp")
 * @param kmelia The component Session Control, build and initialised.
 * @param request The entering request. The request rooter need it to get parameters
 * @return The complete destination URL for a forward (ex :
 * "/almanach/jsp/almanach.jsp?flag=user")
 */
@Override
public String getDestination(String function, KmeliaSessionController kmelia, HttpRequest request) {
    String destination = "";
    String rootDestination = "/kmelia/jsp/";
    boolean profileError = false;
    boolean kmaxMode = false;
    boolean toolboxMode;
    SilverpeasRole userRoleOnCurrentTopic = SilverpeasRole
            .from(kmelia.getUserTopicProfile(kmelia.getCurrentFolderId()));
    SilverpeasRole highestSilverpeasUserRoleOnCurrentTopic = null;
    if (userRoleOnCurrentTopic != null) {
        highestSilverpeasUserRoleOnCurrentTopic = SilverpeasRole.getHighestFrom(userRoleOnCurrentTopic);
    }
    try {
        if ("kmax".equals(kmelia.getComponentRootName())) {
            kmaxMode = true;
            kmelia.setKmaxMode(true);
        }
        request.setAttribute("KmaxMode", kmaxMode);

        toolboxMode = KmeliaHelper.isToolbox(kmelia.getComponentId());

        // Set language choosen by the user
        setLanguage(request, kmelia);

        if (function.startsWith("Main")) {
            if (kmaxMode) {
                destination = getDestination("KmaxMain", kmelia, request);
                kmelia.setSessionTopic(null);
                kmelia.setSessionPath("");
            } else {
                destination = getDestination("GoToTopic", kmelia, request);
            }
        } else if (function.startsWith("validateClassification")) {
            String[] publicationIds = request.getParameterValues("pubid");
            Collection<KmeliaPublication> publications = kmelia
                    .getPublications(asPks(kmelia.getComponentId(), publicationIds));
            request.setAttribute("Context", URLUtil.getApplicationURL());
            request.setAttribute("PublicationsDetails", publications);
            destination = rootDestination + "validateImportedFilesClassification.jsp";
        } else if (function.startsWith("portlet")) {
            kmelia.setSessionPublication(null);
            String flag = kmelia.getHighestSilverpeasUserRole().getName();
            if (kmaxMode) {
                destination = rootDestination + "kmax_portlet.jsp?Profile=" + flag;
            } else {
                destination = rootDestination + "portlet.jsp?Profile=user";
            }
        } else if (function.equals("FlushTrashCan")) {
            kmelia.flushTrashCan();
            if (kmaxMode) {
                destination = getDestination("KmaxMain", kmelia, request);
            } else {
                destination = getDestination("GoToCurrentTopic", kmelia, request);
            }
        } else if (function.equals("GoToDirectory")) {
            String topicId = request.getParameter("Id");

            String path;
            if (StringUtil.isDefined(topicId)) {
                NodeDetail topic = kmelia.getNodeHeader(topicId);
                path = topic.getPath();
            } else {
                path = request.getParameter("Path");
            }

            FileFolder folder = new FileFolder(path);
            request.setAttribute("Directory", folder);
            request.setAttribute("LinkedPathString", kmelia.getSessionPath());

            destination = rootDestination + "repository.jsp";
        } else if ("GoToTopic".equals(function)) {
            String topicId = (String) request.getAttribute("Id");
            if (!StringUtil.isDefined(topicId)) {
                topicId = request.getParameter("Id");
                if (!StringUtil.isDefined(topicId)) {
                    topicId = NodePK.ROOT_NODE_ID;
                }
            }
            kmelia.setCurrentFolderId(topicId, true);
            request.setAttribute("CurrentFolderId", topicId);
            request.setAttribute("DisplayNBPublis", kmelia.displayNbPublis());
            request.setAttribute("DisplaySearch", kmelia.isSearchOnTopicsEnabled());

            request.setAttribute("Profile", kmelia.getUserTopicProfile(topicId));
            request.setAttribute("IsGuest", kmelia.getUserDetail().isAccessGuest());
            request.setAttribute("RightsOnTopicsEnabled", kmelia.isRightsOnTopicsEnabled());
            request.setAttribute("WysiwygDescription", kmelia.getWysiwygOnTopic());
            request.setAttribute("PageIndex", kmelia.getIndexOfFirstPubToDisplay());

            if (kmelia.isTreeviewUsed()) {
                destination = rootDestination + "treeview.jsp";
            } else if (kmelia.isTreeStructure()) {
                destination = rootDestination + "oneLevel.jsp";
            } else {
                destination = rootDestination + "simpleListOfPublications.jsp";
            }
        } else if ("GoToCurrentTopic".equals(function)) {
            if (!NodePK.ROOT_NODE_ID.equals(kmelia.getCurrentFolderId())) {
                request.setAttribute("Id", kmelia.getCurrentFolderId());
                destination = getDestination("GoToTopic", kmelia, request);
            } else {
                destination = getDestination("Main", kmelia, request);
            }
        } else if (function.equals("GoToBasket")) {
            destination = rootDestination + "basket.jsp";
        } else if (function.equals("ViewPublicationsToValidate")) {
            destination = rootDestination + "publicationsToValidate.jsp";
        } else if ("GoBackToResults".equals(function)) {
            request.setAttribute("SearchContext", kmelia.getSearchContext());
            destination = getDestination("GoToCurrentTopic", kmelia, request);
        } else if (function.startsWith("searchResult")) {
            String id = request.getParameter("Id");
            String type = request.getParameter("Type");
            String fileAlreadyOpened = request.getParameter("FileOpened");
            String from = request.getParameter("From");
            if ("Search".equals(from)) {
                // identify clearly access from global search
                // because same URL is used from portlet, permalink...
                request.setAttribute("SearchScope", SearchContext.GLOBAL);
            }

            if (type != null && ("Publication".equals(type)
                    || "org.silverpeas.core.personalorganizer.model.TodoDetail".equals(type)
                    || "Attachment".equals(type) || "Document".equals(type) || type.startsWith("Comment"))) {
                KmeliaAuthorization security = new KmeliaAuthorization(kmelia.getOrganisationController());
                try {
                    PublicationDetail pub2Check = kmelia.getPublicationDetail(id);
                    // If given PK defines a clone, change PK to master
                    if (pub2Check.haveGotClone()) {
                        // check if publication is really the master or the clone ?
                        int pubId = Integer.parseInt(pub2Check.getId());
                        int cloneId = Integer.parseInt(pub2Check.getCloneId());
                        boolean clone = pubId > cloneId;
                        if (clone) {
                            id = pub2Check.getCloneId();
                            request.setAttribute("ForcedId", id);
                        }
                    }
                    boolean accessAuthorized = security.isAccessAuthorized(kmelia.getComponentId(),
                            kmelia.getUserId(), id, "Publication");
                    if (accessAuthorized) {
                        processPath(kmelia, id);
                        if ("Attachment".equals(type)) {
                            String attachmentId = request.getParameter("AttachmentId");
                            request.setAttribute("AttachmentId", attachmentId);
                            destination = getDestination("ViewPublication", kmelia, request);
                        } else if ("Document".equals(type)) {
                            String documentId = request.getParameter("DocumentId");
                            request.setAttribute("DocumentId", documentId);
                            destination = getDestination("ViewPublication", kmelia, request);
                        } else {
                            if (kmaxMode) {
                                request.setAttribute("FileAlreadyOpened", fileAlreadyOpened);
                                destination = getDestination("ViewPublication", kmelia, request);
                            } else if (toolboxMode) {
                                // we have to find which page contains the right publication
                                List<KmeliaPublication> publications = kmelia.getSessionPublicationsList();
                                int pubIndex = -1;
                                for (int p = 0; p < publications.size() && pubIndex == -1; p++) {
                                    KmeliaPublication publication = publications.get(p);
                                    if (id.equals(publication.getDetail().getPK().getId())) {
                                        pubIndex = p;
                                    }
                                }
                                int nbPubliPerPage = kmelia.getNbPublicationsPerPage();
                                if (nbPubliPerPage == 0) {
                                    nbPubliPerPage = pubIndex;
                                }
                                int ipage = pubIndex / nbPubliPerPage;
                                kmelia.setIndexOfFirstPubToDisplay(Integer.toString(ipage * nbPubliPerPage));
                                request.setAttribute("PubIdToHighlight", id);
                                request.setAttribute("Id", kmelia.getCurrentFolderId());
                                destination = getDestination("GoToTopic", kmelia, request);
                            } else {
                                request.setAttribute("FileAlreadyOpened", fileAlreadyOpened);
                                destination = getDestination("ViewPublication", kmelia, request);
                            }
                        }
                    } else {
                        destination = "/admin/jsp/accessForbidden.jsp";
                    }
                } catch (Exception e) {
                    SilverLogger.getLogger(this).error("Document not found. {0}",
                            new String[] { e.getMessage() }, e);
                    destination = getDocumentNotFoundDestination(kmelia, request);
                }
            } else if ("Node".equals(type)) {
                if (kmaxMode) {
                    // Simuler l'action d'un utilisateur ayant slectionn la valeur id d'un axe
                    // SearchCombination est un chemin /0/4/i
                    NodeDetail node = kmelia.getNodeHeader(id);
                    String path = node.getPath() + id;
                    request.setAttribute("SearchCombination", path);
                    destination = getDestination("KmaxSearch", kmelia, request);
                } else {
                    try {
                        request.setAttribute("Id", id);
                        destination = getDestination("GoToTopic", kmelia, request);
                    } catch (Exception e) {
                        SilverLogger.getLogger(this).error("Document not found. {0}",
                                new String[] { e.getMessage() }, e);
                        destination = getDocumentNotFoundDestination(kmelia, request);
                    }
                }
            } else if ("Wysiwyg".equals(type)) {
                if (id.startsWith("Node")) {
                    id = id.substring("Node_".length(), id.length());
                    request.setAttribute("Id", id);
                    destination = getDestination("GoToTopic", kmelia, request);
                } else {
                    destination = getDestination("ViewPublication", kmelia, request);
                }
            } else {
                request.setAttribute("Id", NodePK.ROOT_NODE_ID);
                destination = getDestination("GoToTopic", kmelia, request);
            }
        } else if (function.startsWith("GoToFilesTab")) {
            String id = request.getParameter("Id");
            try {
                processPath(kmelia, id);
                if (toolboxMode) {
                    KmeliaPublication kmeliaPublication = kmelia.getPublication(id);
                    kmelia.setSessionPublication(kmeliaPublication);
                    kmelia.setSessionOwner(true);
                    destination = getDestination("ViewAttachments", kmelia, request);
                } else {
                    destination = getDestination("ViewPublication", kmelia, request);
                }
            } catch (Exception e) {
                SilverLogger.getLogger(this).error("Document not found. {0}", new String[] { e.getMessage() },
                        e);
                destination = getDocumentNotFoundDestination(kmelia, request);
            }
        } else if ("ToUpdatePublicationHeader".equals(function)) {
            request.setAttribute("Action", "UpdateView");
            destination = getDestination("ToPublicationHeader", kmelia, request);
        } else if ("ToPublicationHeader".equals(function)) {
            String action = (String) request.getAttribute("Action");
            if ("UpdateView".equals(action)) {
                request.setAttribute("AttachmentsEnabled", false);
                request.setAttribute("TaxonomyOK", kmelia.isPublicationTaxonomyOK());
                request.setAttribute("ValidatorsOK", kmelia.isPublicationValidatorsOK());
                request.setAttribute("Publication", kmelia.getSessionPubliOrClone());
                setupRequestForSubscriptionNotificationSending(request, highestSilverpeasUserRoleOnCurrentTopic,
                        kmelia.getCurrentFolderPK(), kmelia.getSessionPubliOrClone().getDetail());
            } else if ("New".equals(action)) {
                // Attachments area must be displayed or not ?
                request.setAttribute("AttachmentsEnabled", kmelia.isAttachmentsEnabled());
                request.setAttribute("TaxonomyOK", true);
                request.setAttribute("ValidatorsOK", true);
            }

            request.setAttribute("Path", kmelia.getTopicPath(kmelia.getCurrentFolderId()));
            request.setAttribute("Profile", kmelia.getProfile());

            destination = rootDestination + "publicationManager.jsp";
            // thumbnail error for front explication
            if (request.getParameter("errorThumbnail") != null) {
                destination = destination + "&resultThumbnail=" + request.getParameter("errorThumbnail");
            }
        } else if (function.equals("ToAddTopic")) {
            String topicId = request.getParameter("Id");
            if (!SilverpeasRole.admin.isInRole(kmelia.getUserTopicProfile(topicId))) {
                destination = "/admin/jsp/accessForbidden.jsp";
            } else {
                String isLink = request.getParameter("IsLink");
                if (StringUtil.isDefined(isLink)) {
                    request.setAttribute("IsLink", Boolean.TRUE);
                }

                List<NodeDetail> path = kmelia.getTopicPath(topicId);
                request.setAttribute("Path", kmelia.displayPath(path, false, 3));
                request.setAttribute("PathLinked", kmelia.displayPath(path, true, 3));
                request.setAttribute("Translation", kmelia.getCurrentLanguage());
                request.setAttribute("NotificationAllowed", kmelia.isNotificationAllowed());
                request.setAttribute("Parent", kmelia.getNodeHeader(topicId));

                if (kmelia.isRightsOnTopicsEnabled()) {
                    request.setAttribute("Profiles", kmelia.getTopicProfiles());

                    // Rights of the component
                    request.setAttribute("RightsDependsOn", "ThisComponent");
                }

                destination = rootDestination + "addTopic.jsp";
            }
        } else if ("ToUpdateTopic".equals(function)) {
            String id = request.getParameter("Id");
            NodeDetail node = kmelia.getSubTopicDetail(id);
            if (!SilverpeasRole.admin.isInRole(kmelia.getUserTopicProfile(id))
                    && !SilverpeasRole.admin.isInRole(kmelia.getUserTopicProfile(NodePK.ROOT_NODE_ID))
                    && !SilverpeasRole.admin.isInRole(kmelia.getUserTopicProfile(node.getFatherPK().getId()))) {
                destination = "/admin/jsp/accessForbidden.jsp";
            } else {
                request.setAttribute("NodeDetail", node);

                List<NodeDetail> path = kmelia.getTopicPath(id);
                request.setAttribute("Path", kmelia.displayPath(path, false, 3));
                request.setAttribute("PathLinked", kmelia.displayPath(path, true, 3));
                request.setAttribute("Translation", kmelia.getCurrentLanguage());
                request.setAttribute("NotificationAllowed", kmelia.isNotificationAllowed());

                if (kmelia.isRightsOnTopicsEnabled()) {
                    request.setAttribute("Profiles", kmelia.getTopicProfiles(id));

                    if (node.haveInheritedRights()) {
                        request.setAttribute("RightsDependsOn", "AnotherTopic");
                    } else if (node.haveLocalRights()) {
                        request.setAttribute("RightsDependsOn", "ThisTopic");
                    } else {
                        // Rights of the component
                        request.setAttribute("RightsDependsOn", "ThisComponent");
                    }
                }

                destination = rootDestination + "updateTopicNew.jsp";
            }
        } else if (function.equals("AddTopic")) {
            String name = request.getParameter("Name");
            String description = request.getParameter("Description");
            String alertType = request.getParameter("AlertType");
            if (!StringUtil.isDefined(alertType)) {
                alertType = "None";
            }
            String rightsUsed = request.getParameter("RightsUsed");
            String path = request.getParameter("Path");
            String parentId = request.getParameter("ParentId");

            NodeDetail topic = new NodeDetail("-1", name, description, 0, "X");
            I18NHelper.setI18NInfo(topic, request);

            if (StringUtil.isDefined(path)) {
                topic.setType(NodeDetail.FILE_LINK_TYPE);
                topic.setPath(path);
            }

            int rightsDependsOn = -1;
            if (StringUtil.isDefined(rightsUsed)) {
                if ("father".equalsIgnoreCase(rightsUsed)) {
                    NodeDetail father = kmelia.getCurrentFolder();
                    rightsDependsOn = father.getRightsDependsOn();
                } else {
                    rightsDependsOn = 0;
                }
                topic.setRightsDependsOn(rightsDependsOn);
            }
            NodePK nodePK = kmelia.addSubTopic(topic, alertType, parentId);
            if (kmelia.isRightsOnTopicsEnabled()) {
                if (rightsDependsOn == 0) {
                    request.setAttribute("NodeId", nodePK.getId());
                    destination = getDestination("ViewTopicProfiles", kmelia, request);
                } else {
                    destination = getDestination("GoToCurrentTopic", kmelia, request);
                }
            } else {
                destination = getDestination("GoToCurrentTopic", kmelia, request);
            }
        } else if ("UpdateTopic".equals(function)) {
            String name = request.getParameter("Name");
            String description = request.getParameter("Description");
            String alertType = request.getParameter("AlertType");
            if (!StringUtil.isDefined(alertType)) {
                alertType = "None";
            }
            String id = request.getParameter("ChildId");
            String path = request.getParameter("Path");
            NodeDetail topic = new NodeDetail(id, name, description, 0, "X");
            I18NHelper.setI18NInfo(topic, request);
            if (StringUtil.isDefined(path)) {
                topic.setType(NodeDetail.FILE_LINK_TYPE);
                topic.setPath(path);
            }
            boolean goToProfilesDefinition = false;
            if (kmelia.isRightsOnTopicsEnabled()) {
                int rightsUsed = Integer.parseInt(request.getParameter("RightsUsed"));
                topic.setRightsDependsOn(rightsUsed);

                // process destination
                NodeDetail oldTopic = kmelia.getNodeHeader(id);
                if (oldTopic.getRightsDependsOn() != rightsUsed && rightsUsed != -1) {
                    // rights dependency have changed and  folder uses its own rights
                    goToProfilesDefinition = true;
                }
            }
            kmelia.updateTopicHeader(topic, alertType);

            if (goToProfilesDefinition) {
                request.setAttribute("NodeId", id);
                destination = getDestination("ViewTopicProfiles", kmelia, request);
            } else {
                destination = getDestination("GoToCurrentTopic", kmelia, request);
            }
        } else if (function.equals("DeleteTopic")) {
            String id = request.getParameter("Id");
            kmelia.deleteTopic(id);
            destination = getDestination("GoToCurrentTopic", kmelia, request);
        } else if (function.equals("ViewClone")) {
            PublicationDetail pubDetail = kmelia.getSessionPublication().getDetail();

            // Reload clone and put it into session
            String cloneId = pubDetail.getCloneId();
            KmeliaPublication kmeliaPublication = kmelia.getPublication(cloneId);
            kmelia.setSessionClone(kmeliaPublication);

            request.setAttribute("Publication", kmeliaPublication);
            request.setAttribute("ValidationType", kmelia.getValidationType());
            request.setAttribute("Profile", kmelia.getProfile());
            request.setAttribute("VisiblePublicationId", pubDetail.getPK().getId());
            request.setAttribute("UserCanValidate", kmelia.isUserCanValidatePublication());
            request.setAttribute("TaxonomyOK", kmelia.isPublicationTaxonomyOK());
            request.setAttribute("ValidatorsOK", kmelia.isPublicationValidatorsOK());

            putXMLDisplayerIntoRequest(kmeliaPublication.getDetail(), kmelia, request);

            // Attachments area must be displayed or not ?
            request.setAttribute("AttachmentsEnabled", kmelia.isAttachmentsEnabled());

            destination = rootDestination + "clone.jsp";
        } else if ("ViewPublication".equals(function)) {
            String id = (String) request.getAttribute("ForcedId");
            if (!StringUtil.isDefined(id)) {
                id = request.getParameter("PubId");
                if (!StringUtil.isDefined(id)) {
                    id = request.getParameter("Id");
                    if (!StringUtil.isDefined(id)) {
                        id = (String) request.getAttribute("PubId");
                    }
                }
            }

            if (!kmaxMode) {
                boolean checkPath = StringUtil.getBooleanValue(request.getParameter("CheckPath"));
                if (checkPath || KmeliaHelper.isToValidateFolder(kmelia.getCurrentFolderId())) {
                    processPath(kmelia, id);
                } else {
                    processPath(kmelia, null);
                }
            }

            // view publication from global search ?
            Integer searchScope = (Integer) request.getAttribute("SearchScope");
            if (searchScope == null) {
                if (kmelia.getSearchContext() != null) {
                    request.setAttribute("SearchScope", SearchContext.LOCAL);
                } else {
                    request.setAttribute("SearchScope", SearchContext.NONE);
                }
            }

            KmeliaPublication kmeliaPublication;
            if (StringUtil.isDefined(id)) {
                kmeliaPublication = kmelia.getPublication(id, true);
                // Check user publication access
                PublicationAccessController publicationAccessController = ServiceProvider
                        .getService(PublicationAccessController.class);
                if (!publicationAccessController.isUserAuthorized(kmelia.getUserId(),
                        kmeliaPublication.getPk())) {
                    SilverLogger.getLogger(this).warn("Security alert from {0} with publication {1}",
                            kmelia.getUserId(), id);
                    return "/admin/jsp/accessForbidden.jsp";
                }
                kmelia.setSessionPublication(kmeliaPublication);

                PublicationDetail pubDetail = kmeliaPublication.getDetail();
                if (pubDetail.haveGotClone()) {
                    KmeliaPublication clone = kmelia.getPublication(pubDetail.getCloneId());
                    kmelia.setSessionClone(clone);
                }
            } else {
                kmeliaPublication = kmelia.getSessionPublication();
                id = kmeliaPublication.getDetail().getPK().getId();
            }
            if (toolboxMode) {
                destination = getDestination("ToUpdatePublicationHeader", kmelia, request);
            } else {
                List<String> publicationLanguages = kmelia.getPublicationLanguages(); // languages of
                // publication
                // header and attachments
                if (publicationLanguages.contains(kmelia.getCurrentLanguage())) {
                    request.setAttribute("ContentLanguage", kmelia.getCurrentLanguage());
                } else {
                    request.setAttribute("ContentLanguage",
                            checkLanguage(kmelia, kmeliaPublication.getDetail()));
                }
                request.setAttribute("Languages", publicationLanguages);

                // see also management
                List<PublicationLink> links = kmeliaPublication.getCompleteDetail().getLinkList();
                HashSet<String> linkedList = new HashSet<>(links.size());
                for (PublicationLink link : links) {
                    linkedList.add(link.getTarget().getId() + "-" + link.getTarget().getComponentInstanceId());
                }
                // put into session the current list of selected publications (see also)
                request.getSession().setAttribute(KmeliaConstants.PUB_TO_LINK_SESSION_KEY, linkedList);

                request.setAttribute("Publication", kmeliaPublication);
                request.setAttribute("PubId", id);
                request.setAttribute("UserCanValidate",
                        kmelia.isUserCanValidatePublication() && kmelia.getSessionClone() == null);
                request.setAttribute("ValidationStep", kmelia.getValidationStep());
                request.setAttribute("ValidationType", kmelia.getValidationType());

                // check if user is writer with approval right (versioning case)
                request.setAttribute("WriterApproval", kmelia.isWriterApproval());
                request.setAttribute("NotificationAllowed", kmelia.isNotificationAllowed());

                // check is requested publication is an alias
                boolean alias = checkAlias(kmelia, kmeliaPublication);

                if (alias) {
                    request.setAttribute("Profile", "user");
                    request.setAttribute("TaxonomyOK", false);
                    request.setAttribute("ValidatorsOK", false);
                } else {
                    request.setAttribute("Profile", kmelia.getProfile());
                    request.setAttribute("TaxonomyOK", kmelia.isPublicationTaxonomyOK());
                    request.setAttribute("ValidatorsOK", kmelia.isPublicationValidatorsOK());
                }

                request.setAttribute("Rang", kmelia.getRang());
                if (kmelia.getSessionPublicationsList() != null) {
                    request.setAttribute("NbPublis", kmelia.getSessionPublicationsList().size());
                } else {
                    request.setAttribute("NbPublis", 1);
                }
                putXMLDisplayerIntoRequest(kmeliaPublication.getDetail(), kmelia, request);
                String fileAlreadyOpened = (String) request.getAttribute("FileAlreadyOpened");
                boolean alreadyOpened = "1".equals(fileAlreadyOpened);
                String attachmentId = (String) request.getAttribute("AttachmentId");
                String documentId = (String) request.getAttribute("DocumentId");
                if (!alreadyOpened && kmelia.openSingleAttachmentAutomatically()
                        && !kmelia.isCurrentPublicationHaveContent()) {
                    request.setAttribute("SingleAttachmentURL",
                            kmelia.getSingleAttachmentURLOfCurrentPublication(alias));
                } else if (!alreadyOpened && attachmentId != null) {
                    request.setAttribute("SingleAttachmentURL", kmelia.getAttachmentURL(attachmentId, alias));
                } else if (!alreadyOpened && documentId != null) {
                    request.setAttribute("SingleAttachmentURL", kmelia.getAttachmentURL(documentId, alias));
                }

                // Attachments area must be displayed or not ?
                request.setAttribute("AttachmentsEnabled", kmelia.isAttachmentsEnabled());

                // Last vistors area must be displayed or not ?
                final boolean lastVisitorsEnabled = kmelia.isLastVisitorsEnabled();
                request.setAttribute("LastVisitorsEnabled", lastVisitorsEnabled);
                if (lastVisitorsEnabled) {
                    request.setAttribute("LastAccess", kmelia.getLastAccess(kmeliaPublication.getPk()));
                }
                request.setAttribute("PublicationRatingsAllowed", kmelia.isPublicationRatingAllowed());
                request.setAttribute("SeeAlsoEnabled", kmelia.isSeeAlsoEnabled());

                // Subscription management
                setupRequestForSubscriptionNotificationSending(request, highestSilverpeasUserRoleOnCurrentTopic,
                        kmelia.getCurrentFolderPK(), kmeliaPublication.getDetail());

                destination = rootDestination + "publication.jsp";
            }
        } else if (function.equals("PreviousPublication")) {
            // rcupration de la publication prcdente
            String pubId = kmelia.getPrevious();
            request.setAttribute("PubId", pubId);
            destination = getDestination("ViewPublication", kmelia, request);
        } else if (function.equals("NextPublication")) {
            // rcupration de la publication suivante
            String pubId = kmelia.getNext();
            request.setAttribute("PubId", pubId);
            destination = getDestination("ViewPublication", kmelia, request);
        } else if (function.startsWith("copy")) {
            String objectType = request.getParameter("Object");
            String objectId = request.getParameter("Id");
            if (StringUtil.isDefined(objectType) && "Node".equalsIgnoreCase(objectType)) {
                kmelia.copyTopic(objectId);
            } else {
                kmelia.copyPublication(objectId);
            }

            destination = URLUtil.getURL(URLUtil.CMP_CLIPBOARD, null, null)
                    + "Idle.jsp?message=REFRESHCLIPBOARD";
        } else if (function.startsWith("cut")) {
            String objectType = request.getParameter("Object");
            String objectId = request.getParameter("Id");
            if (StringUtil.isDefined(objectType) && "Node".equalsIgnoreCase(objectType)) {
                kmelia.cutTopic(objectId);
            } else {
                kmelia.cutPublication(objectId);
            }

            destination = URLUtil.getURL(URLUtil.CMP_CLIPBOARD, null, null)
                    + "Idle.jsp?message=REFRESHCLIPBOARD";
        } else if (function.equals("ReadingControl")) {
            PublicationDetail publication = kmelia.getSessionPublication().getDetail();
            request.setAttribute("LinkedPathString", kmelia.getSessionPath());
            request.setAttribute("Publication", publication);
            request.setAttribute("UserIds", kmelia.getUserIdsOfTopic());

            destination = rootDestination + "readingControlManager.jsp";
        } else if (function.startsWith("ViewAttachments")) {
            String flag = kmelia.getProfile();

            // Versioning is out of "Always visible publication" mode
            if (kmelia.isCloneNeeded() && !kmelia.isVersionControlled()) {
                kmelia.clonePublication();
            }

            // put current publication
            if (!kmelia.isVersionControlled()) {
                request.setAttribute("CurrentPublicationDetail", kmelia.getSessionPubliOrClone().getDetail());
            } else {
                request.setAttribute("CurrentPublicationDetail", kmelia.getSessionPublication().getDetail());
            }

            // Paramtres de i18n
            List<String> attachmentLanguages = kmelia.getAttachmentLanguages();
            if (attachmentLanguages.contains(kmelia.getCurrentLanguage())) {
                request.setAttribute("Language", kmelia.getCurrentLanguage());
            } else {
                request.setAttribute("Language", checkLanguage(kmelia));
            }
            request.setAttribute("Languages", attachmentLanguages);

            request.setAttribute("XmlFormForFiles", kmelia.getXmlFormForFiles());

            destination = rootDestination + "attachmentManager.jsp?profile=" + flag;
        } else if (function.equals("DeletePublication")) {
            String pubId = request.getParameter("PubId");
            kmelia.deletePublication(pubId);

            if (kmaxMode) {
                destination = getDestination("Main", kmelia, request);
            } else {
                destination = getDestination("GoToCurrentTopic", kmelia, request);
            }
        } else if (function.equals("DeleteClone")) {
            kmelia.deleteClone();
            request.setAttribute("ForcedId", kmelia.getSessionPublication().getId());
            destination = getDestination("ViewPublication", kmelia, request);
        } else if (function.equals("ViewValidationSteps")) {
            request.setAttribute("LinkedPathString", kmelia.getSessionPath());
            request.setAttribute("Publication", kmelia.getSessionPubliOrClone().getDetail());
            request.setAttribute("ValidationSteps", kmelia.getValidationSteps());

            request.setAttribute("Role", kmelia.getProfile());

            destination = rootDestination + "validationSteps.jsp";
        } else if ("ValidatePublication".equals(function)) {
            String pubId = kmelia.getSessionPublication().getDetail().getPK().getId();
            boolean validationComplete = kmelia.validatePublication(pubId);
            if (validationComplete) {
                request.setAttribute("Action", "ValidationComplete");
                destination = getDestination("ViewPublication", kmelia, request);
            } else {
                request.setAttribute("Action", "ValidationInProgress");
                if (kmelia.getSessionClone() != null) {
                    destination = getDestination("ViewClone", kmelia, request);
                } else {
                    destination = getDestination("ViewPublication", kmelia, request);
                }
            }
        } else if (function.equals("ForceValidatePublication")) {
            String pubId = kmelia.getSessionPublication().getDetail().getPK().getId();
            kmelia.forcePublicationValidation(pubId);
            request.setAttribute("Action", "ValidationComplete");

            request.setAttribute("PubId", pubId);
            destination = getDestination("ViewPublication", kmelia, request);
        } else if ("Unvalidate".equals(function)) {
            String motive = request.getParameter("Motive");
            String pubId = kmelia.getSessionPublication().getDetail().getPK().getId();
            kmelia.unvalidatePublication(pubId, motive);

            request.setAttribute("Action", "Unvalidate");

            if (kmelia.getSessionClone() != null) {
                destination = getDestination("ViewClone", kmelia, request);
            } else {
                destination = getDestination("ViewPublication", kmelia, request);
            }
        } else if (function.equals("WantToSuspendPubli")) {
            String pubId = request.getParameter("PubId");

            PublicationDetail pubDetail = kmelia.getPublicationDetail(pubId);

            destination = rootDestination + "defermentMotive.jsp";
        } else if (function.equals("SuspendPublication")) {
            String motive = request.getParameter("Motive");
            String pubId = request.getParameter("PubId");

            kmelia.suspendPublication(pubId, motive);

            request.setAttribute("Action", "Suspend");

            destination = getDestination("ViewPublication", kmelia, request);
        } else if (function.equals("DraftIn")) {
            kmelia.draftInPublication();
            if (kmelia.getSessionClone() != null) {
                // draft have generate a clone
                destination = getDestination("ViewClone", kmelia, request);
            } else {
                String from = request.getParameter("From");
                if (StringUtil.isDefined(from)) {
                    destination = getDestination(from, kmelia, request);
                } else {
                    destination = getDestination("ToUpdatePublicationHeader", kmelia, request);
                }
            }
        } else if (function.equals("DraftOut")) {
            kmelia.draftOutPublication();

            destination = getDestination("ViewPublication", kmelia, request);
        } else if (function.equals("ToTopicWysiwyg")) {
            String topicId = request.getParameter("Id");
            String subTopicId = request.getParameter("ChildId");
            String flag = kmelia.getProfile();

            NodeDetail topic = kmelia.getSubTopicDetail(subTopicId);
            String browseInfo = kmelia.getSessionPathString();
            if (browseInfo != null && !browseInfo.contains(topic.getName())) {
                browseInfo += topic.getName();
            }
            if (!StringUtil.isDefined(browseInfo)) {
                browseInfo = kmelia.getString("TopicWysiwyg");
            } else {
                browseInfo += " > " + kmelia.getString("TopicWysiwyg");
            }

            WysiwygRouting routing = new WysiwygRouting();
            WysiwygRouting.WysiwygRoutingContext context = WysiwygRouting.WysiwygRoutingContext
                    .fromComponentSessionController(kmelia).withBrowseInfo(browseInfo)
                    .withContributionId(
                            ContributionIdentifier.from(kmelia.getComponentId(), "Node_" + subTopicId, NODE))
                    .withContentLanguage(kmelia.getCurrentLanguage())
                    .withComeBackUrl(URLUtil.getApplicationURL()
                            + URLUtil.getURL(kmelia.getSpaceId(), kmelia.getComponentId())
                            + "FromTopicWysiwyg?Action=Search&Id=" + topicId + "&ChildId=" + subTopicId
                            + "&Profile=" + flag);

            destination = routing.getWysiwygEditorPath(context, request);
        } else if (function.equals("FromTopicWysiwyg")) {
            String subTopicId = request.getParameter("ChildId");

            kmelia.processTopicWysiwyg(subTopicId);

            destination = getDestination("GoToCurrentTopic", kmelia, request);
        } else if (function.equals("ChangeTopicStatus")) {
            String subTopicId = request.getParameter("ChildId");
            String newStatus = request.getParameter("Status");
            String recursive = request.getParameter("Recursive");

            if (recursive != null && recursive.equals("1")) {
                kmelia.changeTopicStatus(newStatus, subTopicId, true);
            } else {
                kmelia.changeTopicStatus(newStatus, subTopicId, false);
            }

            destination = getDestination("GoToCurrentTopic", kmelia, request);
        } else if (function.equals("ViewOnly")) {
            String id = request.getParameter("Id");
            destination = rootDestination + "publicationViewOnly.jsp?Id=" + id;
        } else if (function.equals("ImportFileUpload")) {
            destination = processFormUpload(kmelia, request, rootDestination, false);
        } else if (function.equals("ImportFilesUpload")) {
            destination = processFormUpload(kmelia, request, rootDestination, true);
        } else if (function.equals("ExportAttachementsToPDF")) {
            String topicId = request.getParameter("TopicId");
            // build an exploitable list by importExportPeas
            List<WAAttributeValuePair> publicationsIds = kmelia.getAllVisiblePublicationsByTopic(topicId);
            request.setAttribute("selectedResultsWa", publicationsIds);
            request.setAttribute("RootPK", new NodePK(topicId, kmelia.getComponentId()));
            // Go to importExportPeas
            destination = "/RimportExportPeas/jsp/ExportPDF";
        } else if (function.equals("NewPublication")) {
            request.setAttribute("Action", "New");
            request.setAttribute("ExtraForm", kmelia.getXmlFormForPublications());

            PublicationDetail volatilePublication = kmelia.prepareNewPublication();
            request.setAttribute("VolatilePublication", volatilePublication);

            PagesContext extraFormPageContext = new PagesContext();
            extraFormPageContext.setUserId(kmelia.getUserId());
            extraFormPageContext.setComponentId(kmelia.getComponentId());
            extraFormPageContext.setObjectId(volatilePublication.getPK().getId());
            extraFormPageContext.setNodeId(kmelia.getCurrentFolderId());
            extraFormPageContext.setLanguage(kmelia.getLanguage());
            request.setAttribute("ExtraFormPageContext", extraFormPageContext);

            destination = getDestination("ToPublicationHeader", kmelia, request);
        } else if (function.equals("ManageSubscriptions")) {
            destination = kmelia.manageSubscriptions();
        } else if (function.equals("AddPublication")) {
            List<FileItem> parameters = request.getFileItems();

            // create publication
            String positions = FileUploadUtil.getParameter(parameters, "KmeliaPubPositions");
            PdcClassificationEntity withClassification = PdcClassificationEntity.undefinedClassification();
            if (StringUtil.isDefined(positions)) {
                withClassification = PdcClassificationEntity.fromJSON(positions);
            }
            PublicationDetail pubDetail = getPublicationDetail(parameters, kmelia);
            String newPubId = kmelia.createPublication(pubDetail, withClassification);

            if (kmelia.isReminderUsed()) {
                PublicationDetail pubDetailCreated = kmelia.getPublicationDetail(newPubId);
                kmelia.addPublicationReminder(pubDetailCreated, parameters);
            }

            // create thumbnail if exists
            boolean newThumbnail = ThumbnailController
                    .processThumbnail(new ResourceReference(newPubId, kmelia.getComponentId()), parameters);

            //process files
            Collection<UploadedFile> attachments = request.getUploadedFiles();
            kmelia.addUploadedFilesToPublication(attachments, pubDetail);

            String volatileId = FileUploadUtil.getParameter(parameters, "KmeliaPubVolatileId");
            if (StringUtil.isDefined(volatileId)) {
                //process extra form
                kmelia.saveXMLFormToPublication(pubDetail, parameters, false);
            }

            // force indexation to add thumbnail and attachments to publication index
            if ((newThumbnail || !attachments.isEmpty()) && pubDetail.isIndexable()) {
                kmelia.getPublicationService().createIndex(pubDetail.getPK());
            }

            request.setAttribute("PubId", newPubId);
            processPath(kmelia, newPubId);
            StringBuffer requestURI = request.getRequestURL();
            destination = requestURI.substring(0, requestURI.indexOf("AddPublication"))
                    + "ViewPublication?PubId=" + newPubId;
        } else if ("UpdatePublication".equals(function)) {
            List<FileItem> parameters = request.getFileItems();

            PublicationDetail pubDetail = getPublicationDetail(parameters, kmelia);
            String pubId = pubDetail.getPK().getId();
            ThumbnailController.processThumbnail(new ResourceReference(pubId, kmelia.getComponentId()),
                    parameters);

            kmelia.updatePublication(pubDetail);

            if (kmelia.isReminderUsed()) {
                kmelia.updatePublicationReminder(pubId, parameters);
            }

            if (kmelia.getSessionClone() != null) {
                destination = getDestination("ViewClone", kmelia, request);
            } else {
                request.setAttribute("PubId", pubId);
                request.setAttribute("CheckPath", "1");
                destination = getDestination("ViewPublication", kmelia, request);
            }
        } else if (function.equals("SelectValidator")) {
            String formElementName = request.getParameter("FormElementName");
            String formElementId = request.getParameter("FormElementId");
            String folderId = request.getParameter("FolderId");
            destination = kmelia.initUPToSelectValidator(formElementName, formElementId, folderId);
        } else if (function.equals("PublicationPaths")) {
            PublicationDetail publication = kmelia.getSessionPublication().getDetail();
            String pubId = publication.getPK().getId();
            request.setAttribute("Publication", publication);
            request.setAttribute("LinkedPathString", kmelia.getSessionPath());
            request.setAttribute("PathList", kmelia.getPublicationFathers(pubId));

            if (toolboxMode) {
                request.setAttribute("Topics", kmelia.getAllTopics());
            } else {
                List<Alias> aliases = kmelia.getAliases();
                request.setAttribute("Aliases", aliases);
                request.setAttribute("Components", kmelia.getComponents(aliases));
            }

            destination = rootDestination + "publicationPaths.jsp";
        } else if (function.equals("SetPath")) {
            String[] topics = request.getParameterValues("topicChoice");
            String loadedComponentIds = request.getParameter("LoadedComponentIds");

            Alias alias;
            List<Alias> aliases = new ArrayList<Alias>();
            for (int i = 0; topics != null && i < topics.length; i++) {
                String topicId = topics[i];
                StringTokenizer tokenizer = new StringTokenizer(topicId, ",");
                String nodeId = tokenizer.nextToken();
                String instanceId = tokenizer.nextToken();

                alias = new Alias(nodeId, instanceId);
                alias.setUserId(kmelia.getUserId());
                aliases.add(alias);
            }

            // Tous les composants ayant un alias n'ont pas forcment t chargs
            List<Alias> oldAliases = kmelia.getAliases();
            for (Alias oldAlias : oldAliases) {
                if (!loadedComponentIds.contains(oldAlias.getInstanceId())) {
                    // le composant de l'alias n'a pas t charg
                    aliases.add(oldAlias);
                }
            }

            kmelia.setAliases(aliases);

            destination = getDestination("ViewPublication", kmelia, request);
        } else if (function.equals("ShowAliasTree")) {
            String componentId = request.getParameter("ComponentId");

            request.setAttribute("Tree", kmelia.getAliasTreeview(componentId));
            request.setAttribute("Aliases", kmelia.getAliases());

            destination = rootDestination + "treeview4PublicationPaths.jsp";
        } else if (function.equals("AddLinksToPublication")) {
            String id = request.getParameter("PubId");
            String topicId = request.getParameter("TopicId");
            //noinspection unchecked
            HashSet<String> list = (HashSet) request.getSession()
                    .getAttribute(KmeliaConstants.PUB_TO_LINK_SESSION_KEY);

            int nb = kmelia.addPublicationsToLink(id, list);

            request.setAttribute("NbLinks", Integer.toString(nb));

            destination = rootDestination + "publicationLinksManager.jsp?Action=Add&Id=" + topicId;
        } else if (function.equals("ExportTopic")) {
            String topicId = request.getParameter("TopicId");
            boolean exportFullApp = !StringUtil.isDefined(topicId) || NodePK.ROOT_NODE_ID.equals(topicId);
            if (kmaxMode) {
                if (exportFullApp) {
                    destination = getDestination("KmaxExportComponent", kmelia, request);
                } else {
                    destination = getDestination("KmaxExportPublications", kmelia, request);
                }
            } else {
                // build an exploitable list by importExportPeas
                final List<WAAttributeValuePair> publicationsIds;
                if (exportFullApp) {
                    publicationsIds = kmelia.getAllVisiblePublications();
                } else {
                    publicationsIds = kmelia.getAllVisiblePublicationsByTopic(topicId);
                }
                request.setAttribute("selectedResultsWa", publicationsIds);
                request.setAttribute("RootPK", new NodePK(topicId, kmelia.getComponentId()));
                // Go to importExportPeas
                destination = "/RimportExportPeas/jsp/SelectExportMode";
            }
        } else if (function.equals("ExportPublications")) {
            String selectedIds = request.getParameter("SelectedIds");
            String notSelectedIds = request.getParameter("NotSelectedIds");
            List<PublicationPK> pks = kmelia.processSelectedPublicationIds(selectedIds, notSelectedIds);

            List<WAAttributeValuePair> publicationIds = new ArrayList<WAAttributeValuePair>();
            for (PublicationPK pk : pks) {
                publicationIds.add(new WAAttributeValuePair(pk.getId(), pk.getInstanceId()));
            }
            request.setAttribute("selectedResultsWa", publicationIds);
            request.setAttribute("RootPK", new NodePK(kmelia.getCurrentFolderId(), kmelia.getComponentId()));
            kmelia.resetSelectedPublicationPKs();
            // Go to importExportPeas
            destination = "/RimportExportPeas/jsp/SelectExportMode";
        } else if (function.equals("ToPubliContent")) {
            CompletePublication completePublication = kmelia.getSessionPubliOrClone().getCompleteDetail();
            if (WysiwygController.haveGotWysiwyg(kmelia.getComponentId(),
                    completePublication.getPublicationDetail().getPK().getId(), kmelia.getCurrentLanguage())) {

                destination = getDestination("ToWysiwyg", kmelia, request);
            } else {
                String infoId = completePublication.getPublicationDetail().getInfoId();
                if (infoId == null || "0".equals(infoId)) {
                    List<String> usedModels = kmelia.getModelUsed();
                    if (usedModels.size() == 1) {
                        String modelId = usedModels.get(0);
                        if ("WYSIWYG".equals(modelId)) {
                            // Wysiwyg content
                            destination = getDestination("ToWysiwyg", kmelia, request);
                        } else {
                            // XML template
                            request.setAttribute("Name", modelId);
                            destination = getDestination("GoToXMLForm", kmelia, request);
                        }
                    } else {
                        destination = getDestination("ListModels", kmelia, request);
                    }
                } else {
                    destination = getDestination("GoToXMLForm", kmelia, request);
                }
            }
        } else if (function.equals("ListModels")) {
            setTemplatesUsedIntoRequest(kmelia, request);

            // put current publication
            request.setAttribute("CurrentPublicationDetail", kmelia.getSessionPublication().getDetail());

            destination = rootDestination + "modelsList.jsp";
        } else if (function.equals("ModelUsed")) {
            request.setAttribute("XMLForms", kmelia.getForms());

            Collection<String> modelUsed = kmelia.getModelUsed();
            request.setAttribute("ModelUsed", modelUsed);

            destination = rootDestination + "modelUsedList.jsp";
        } else if (function.equals("SelectModel")) {
            kmelia.setModelUsed(request.getParameterValues("modelChoice"));
            destination = getDestination("GoToCurrentTopic", kmelia, request);
        } else if ("ChangeTemplate".equals(function)) {
            kmelia.removePublicationContent();
            destination = getDestination("ToPubliContent", kmelia, request);
        } else if ("ToWysiwyg".equals(function)) {
            if (kmelia.isCloneNeeded()) {
                kmelia.clonePublication();
            }
            // put current publication
            PublicationDetail publication = kmelia.getSessionPubliOrClone().getDetail();

            String browseInfo;
            if (kmaxMode) {
                browseInfo = publication.getName();
            } else {
                browseInfo = kmelia.getSessionPathString();
                if (StringUtil.isDefined(browseInfo)) {
                    browseInfo += " > ";
                }
                browseInfo += publication.getName(kmelia.getCurrentLanguage());
            }

            // Subscription management
            setupRequestForSubscriptionNotificationSending(request, highestSilverpeasUserRoleOnCurrentTopic,
                    kmelia.getCurrentFolderPK(), publication);

            WysiwygRouting routing = new WysiwygRouting();
            WysiwygRouting.WysiwygRoutingContext context = WysiwygRouting.WysiwygRoutingContext
                    .fromComponentSessionController(kmelia).withBrowseInfo(browseInfo)
                    .withContributionId(ContributionIdentifier.from(kmelia.getComponentId(),
                            publication.getId(), publication.getContributionType()))
                    .withContentLanguage(checkLanguage(kmelia, publication))
                    .withComeBackUrl(URLUtil.getApplicationURL() + kmelia.getComponentUrl()
                            + "FromWysiwyg?PubId=" + publication.getId())
                    .withIndexation(false);
            destination = routing.getWysiwygEditorPath(context, request);
        } else if ("FromWysiwyg".equals(function)) {
            String id = request.getParameter("PubId");
            if (kmelia.getSessionClone() != null
                    && id.equals(kmelia.getSessionClone().getDetail().getPK().getId())) {
                destination = getDestination("ViewClone", kmelia, request);
            } else {
                destination = getDestination("ViewPublication", kmelia, request);
            }
        } else if (function.equals("GoToXMLForm")) {
            String xmlFormName = (String) request.getAttribute("Name");
            if (!StringUtil.isDefined(xmlFormName)) {
                xmlFormName = request.getParameter("Name");
            }
            setXMLUpdateForm(request, kmelia, xmlFormName);
            // put current publication
            request.setAttribute("CurrentPublicationDetail", kmelia.getSessionPubliOrClone().getDetail());
            // template can be changed only if current topic is using at least two templates
            setTemplatesUsedIntoRequest(kmelia, request);
            @SuppressWarnings("unchecked")
            Collection<PublicationTemplate> templates = (Collection<PublicationTemplate>) request
                    .getAttribute("XMLForms");
            boolean wysiwygUsable = (Boolean) request.getAttribute("WysiwygValid");
            request.setAttribute("IsChangingTemplateAllowed",
                    templates.size() >= 2 || (!templates.isEmpty() && wysiwygUsable));

            setupRequestForSubscriptionNotificationSending(request, highestSilverpeasUserRoleOnCurrentTopic,
                    kmelia.getCurrentFolderPK(), kmelia.getSessionPubliOrClone().getDetail());

            destination = rootDestination + "xmlForm.jsp";
        } else if (function.equals("UpdateXMLForm")) {
            List<FileItem> items = request.getFileItems();

            kmelia.saveXMLForm(items, true);

            if (kmelia.getSessionClone() != null) {
                destination = getDestination("ViewClone", kmelia, request);
            } else if (kmaxMode) {
                destination = getDestination("ViewAttachments", kmelia, request);
            } else {
                destination = getDestination("ViewPublication", kmelia, request);
            }
        } else if (function.startsWith("ToOrderPublications")) {
            List<KmeliaPublication> publications = kmelia.getSessionPublicationsList();

            request.setAttribute("Publications", publications);
            request.setAttribute("Path", kmelia.getSessionPath());

            destination = rootDestination + "orderPublications.jsp";
        } else if (function.startsWith("OrderPublications")) {
            String sortedIds = request.getParameter("sortedIds");

            StringTokenizer tokenizer = new StringTokenizer(sortedIds, ",");
            List<String> ids = new ArrayList<String>();
            while (tokenizer.hasMoreTokens()) {
                ids.add(tokenizer.nextToken());
            }
            kmelia.orderPublications(ids);

            destination = getDestination("GoToCurrentTopic", kmelia, request);
        } else if (function.equals("ToOrderTopics")) {
            String id = request.getParameter("Id");
            if (!SilverpeasRole.admin.isInRole(kmelia.getUserTopicProfile(id))) {
                destination = "/admin/jsp/accessForbidden.jsp";
            } else {
                TopicDetail topic = kmelia.getTopic(id);
                request.setAttribute("Nodes", topic.getNodeDetail().getChildrenDetails());
                destination = rootDestination + "orderTopics.jsp";
            }
        } else if ("ViewTopicProfiles".equals(function)) {
            String role = request.getParameter("Role");
            if (!StringUtil.isDefined(role)) {
                role = SilverpeasRole.admin.toString();
            }

            String id = request.getParameter("NodeId");
            if (!StringUtil.isDefined(id)) {
                id = (String) request.getAttribute("NodeId");
            }
            if (!(kmelia.isTopicAdmin(id) || kmelia.isUserComponentAdmin())) {
                SilverLogger.getLogger(this).warn("Security alert from {0}", kmelia.getUserId());
                return "/admin/jsp/accessForbidden.jsp";
            }
            request.setAttribute("Profiles", kmelia.getTopicProfiles(id));
            NodeDetail topic = kmelia.getNodeHeader(id);
            ProfileInst profile;
            if (topic.haveInheritedRights()) {
                profile = kmelia.getTopicProfile(role, Integer.toString(topic.getRightsDependsOn()));

                request.setAttribute("RightsDependsOn", "AnotherTopic");
            } else if (topic.haveLocalRights()) {
                profile = kmelia.getTopicProfile(role, Integer.toString(topic.getRightsDependsOn()));

                request.setAttribute("RightsDependsOn", "ThisTopic");
            } else {
                profile = kmelia.getProfile(role);
                // Rights of the component
                request.setAttribute("RightsDependsOn", "ThisComponent");
            }

            request.setAttribute("CurrentProfile", profile);
            request.setAttribute("Groups", kmelia.groupIds2Groups(profile.getAllGroups()));
            request.setAttribute("Users", kmelia.userIds2Users(profile.getAllUsers()));
            List<NodeDetail> path = kmelia.getTopicPath(id);
            request.setAttribute("Path", kmelia.displayPath(path, true, 3));
            request.setAttribute("NodeDetail", topic);

            destination = rootDestination + "topicProfiles.jsp";
        } else if (function.equals("TopicProfileSelection")) {
            String role = request.getParameter("Role");
            String nodeId = request.getParameter("NodeId");
            String[] userIds = StringUtil.split(request.getParameter("UserPanelCurrentUserIds"), ',');
            String[] groupIds = StringUtil.split(request.getParameter("UserPanelCurrentGroupIds"), ',');
            try {
                kmelia.initUserPanelForTopicProfile(role, nodeId, groupIds, userIds);
            } catch (Exception e) {
                SilverLogger.getLogger(this).error(e.getMessage(), e);
            }
            destination = Selection.getSelectionURL();
        } else if (function.equals("TopicProfileSetUsersAndGroups")) {
            String role = request.getParameter("Role");
            String nodeId = request.getParameter("NodeId");
            String[] userIds = StringUtil.split(request.getParameter("roleItems" + "UserPanelCurrentUserIds"),
                    ',');
            String[] groupIds = StringUtil.split(request.getParameter("roleItems" + "UserPanelCurrentGroupIds"),
                    ',');

            if (kmelia.isTopicAdmin(nodeId) || kmelia.isUserComponentAdmin()) {
                kmelia.updateTopicRole(role, nodeId, groupIds, userIds);
            } else {
                SilverLogger.getLogger(this).warn("Security alert from {0}", kmelia.getUserId());
            }
            destination = getDestination("ViewTopicProfiles", kmelia, request);
        } else if (function.equals("CloseWindow")) {
            destination = rootDestination + "closeWindow.jsp";
        }
        /**
         * *************************
         * Kmax mode ***********************
         */
        else if (function.equals("KmaxMain")) {
            destination = rootDestination + "kmax.jsp?Action=KmaxView&Profile=" + kmelia.getProfile();
        } else if (function.equals("KmaxAxisManager")) {
            destination = rootDestination + "kmax_axisManager.jsp?Action=KmaxViewAxis&Profile="
                    + kmelia.getProfile();
        } else if (function.equals("KmaxAddAxis")) {
            String newAxisName = request.getParameter("Name");
            String newAxisDescription = request.getParameter("Description");
            NodeDetail axis = new NodeDetail("-1", newAxisName, newAxisDescription, 0, "X");
            axis.setCreationDate(DateUtil.today2SQLDate());
            axis.setCreatorId(kmelia.getUserId());
            // I18N
            I18NHelper.setI18NInfo(axis, request);
            kmelia.addAxis(axis);

            request.setAttribute("urlToReload", "KmaxAxisManager");
            destination = rootDestination + "closeWindow.jsp";
        } else if (function.equals("KmaxUpdateAxis")) {
            String axisId = request.getParameter("AxisId");
            String newAxisName = request.getParameter("AxisName");
            String newAxisDescription = request.getParameter("AxisDescription");
            NodeDetail axis = new NodeDetail(axisId, newAxisName, newAxisDescription, 0, "X");
            // I18N
            I18NHelper.setI18NInfo(axis, request);
            kmelia.updateAxis(axis);
            destination = getDestination("KmaxAxisManager", kmelia, request);
        } else if (function.equals("KmaxDeleteAxis")) {
            String axisId = request.getParameter("AxisId");
            kmelia.deleteAxis(axisId);
            destination = getDestination("KmaxAxisManager", kmelia, request);
        } else if (function.equals("KmaxManageAxis")) {
            String axisId = request.getParameter("AxisId");
            String translation = request.getParameter("Translation");
            request.setAttribute("Translation", translation);
            destination = rootDestination + "kmax_axisManager.jsp?Action=KmaxManageAxis&Profile="
                    + kmelia.getProfile() + "&AxisId=" + axisId;
        } else if (function.equals("KmaxManagePosition")) {
            String positionId = request.getParameter("PositionId");
            String translation = request.getParameter("Translation");
            request.setAttribute("Translation", translation);
            destination = rootDestination + "kmax_axisManager.jsp?Action=KmaxManagePosition&Profile="
                    + kmelia.getProfile() + "&PositionId=" + positionId;
        } else if (function.equals("KmaxAddPosition")) {
            String axisId = request.getParameter("AxisId");
            String newPositionName = request.getParameter("Name");
            String newPositionDescription = request.getParameter("Description");
            String translation = request.getParameter("Translation");
            NodeDetail position = new NodeDetail("toDefine", newPositionName, newPositionDescription, 0, "X");
            // I18N
            I18NHelper.setI18NInfo(position, request);
            kmelia.addPosition(axisId, position);
            request.setAttribute("AxisId", axisId);
            request.setAttribute("Translation", translation);
            destination = getDestination("KmaxManageAxis", kmelia, request);
        } else if (function.equals("KmaxUpdatePosition")) {
            String positionId = request.getParameter("PositionId");
            String positionName = request.getParameter("PositionName");
            String positionDescription = request.getParameter("PositionDescription");
            NodeDetail position = new NodeDetail(positionId, positionName, positionDescription, 0, "X");
            // I18N
            I18NHelper.setI18NInfo(position, request);
            kmelia.updatePosition(position);
            destination = getDestination("KmaxAxisManager", kmelia, request);
        } else if (function.equals("KmaxDeletePosition")) {
            String positionId = request.getParameter("PositionId");
            kmelia.deletePosition(positionId);
            destination = getDestination("KmaxAxisManager", kmelia, request);
        } else if (function.equals("KmaxViewUnbalanced")) {
            List<KmeliaPublication> publications = kmelia.getUnbalancedPublications();
            kmelia.setSessionPublicationsList(publications);
            kmelia.orderPubs();

            destination = rootDestination + "kmax.jsp?Action=KmaxViewUnbalanced&Profile=" + kmelia.getProfile();
        } else if (function.equals("KmaxViewBasket")) {
            TopicDetail basket = kmelia.getTopic("1");
            List<KmeliaPublication> publications = (List<KmeliaPublication>) basket.getKmeliaPublications();
            kmelia.setSessionPublicationsList(publications);
            kmelia.orderPubs();

            destination = rootDestination + "kmax.jsp?Action=KmaxViewBasket&Profile=" + kmelia.getProfile();

        } else if (function.equals("KmaxViewToValidate")) {
            destination = rootDestination + "kmax.jsp?Action=KmaxViewToValidate&Profile=" + kmelia.getProfile();
        } else if (function.equals("KmaxSearch")) {
            String axisValuesStr = request.getParameter("SearchCombination");
            if (!StringUtil.isDefined(axisValuesStr)) {
                axisValuesStr = (String) request.getAttribute("SearchCombination");
            }
            String timeCriteria = request.getParameter("TimeCriteria");

            List<String> combination = kmelia.getCombination(axisValuesStr);
            List<KmeliaPublication> publications;
            if (StringUtil.isDefined(timeCriteria) && !"X".equals(timeCriteria)) {
                publications = kmelia.search(combination, Integer.parseInt(timeCriteria));
            } else {
                publications = kmelia.search(combination);
            }

            kmelia.setIndexOfFirstPubToDisplay("0");
            kmelia.orderPubs();
            kmelia.setSessionCombination(combination);
            kmelia.setSessionTimeCriteria(timeCriteria);

            destination = rootDestination + "kmax.jsp?Action=KmaxSearchResult&Profile=" + kmelia.getProfile();
        } else if (function.equals("KmaxSearchResult")) {
            if (kmelia.getSessionCombination() == null) {
                destination = getDestination("KmaxMain", kmelia, request);
            } else {
                destination = rootDestination + "kmax.jsp?Action=KmaxSearchResult&Profile="
                        + kmelia.getProfile();
            }
        } else if (function.equals("KmaxViewCombination")) {
            request.setAttribute("CurrentCombination", kmelia.getCurrentCombination());
            destination = rootDestination + "kmax_viewCombination.jsp?Profile=" + kmelia.getProfile();
        } else if (function.equals("KmaxAddCoordinate")) {
            String pubId = request.getParameter("PubId");
            String axisValuesStr = request.getParameter("SearchCombination");
            StringTokenizer st = new StringTokenizer(axisValuesStr, ",");
            List<String> combination = new ArrayList<String>();
            String axisValue;
            while (st.hasMoreTokens()) {
                axisValue = st.nextToken();
                // axisValue is xx/xx/xx where xx are nodeId
                axisValue = axisValue.substring(axisValue.lastIndexOf('/') + 1, axisValue.length());
                combination.add(axisValue);
            }
            kmelia.addPublicationToCombination(pubId, combination);
            // Store current combination
            kmelia.setCurrentCombination(kmelia.getCombination(axisValuesStr));
            destination = getDestination("KmaxViewCombination", kmelia, request);
        } else if (function.equals("KmaxDeleteCoordinate")) {
            String coordinateId = request.getParameter("CoordinateId");
            String pubId = request.getParameter("PubId");
            kmelia.deletePublicationFromCombination(pubId, coordinateId);
            destination = getDestination("KmaxViewCombination", kmelia, request);
        } else if (function.equals("KmaxExportComponent")) {
            // build an exploitable list by importExportPeas
            List<WAAttributeValuePair> publicationsIds = kmelia.getAllVisiblePublications();
            request.setAttribute("selectedResultsWa", publicationsIds);

            // Go to importExportPeas
            destination = "/RimportExportPeas/jsp/KmaxExportComponent";
        } else if (function.equals("KmaxExportPublications")) {
            // build an exploitable list by importExportPeas
            List<WAAttributeValuePair> publicationsIds = kmelia.getCurrentPublicationsList();
            List<String> combination = kmelia.getSessionCombination();
            // get the time axis
            String timeCriteria = null;
            if (kmelia.isTimeAxisUsed() && StringUtil.isDefined(kmelia.getSessionTimeCriteria())) {
                LocalizationBundle timeSettings = ResourceLocator
                        .getLocalizationBundle("org.silverpeas.kmelia.multilang.timeAxisBundle");
                if (kmelia.getSessionTimeCriteria().equals("X")) {
                    timeCriteria = null;
                } else {
                    String localizedCriteria = timeSettings.getString(kmelia.getSessionTimeCriteria());
                    if (localizedCriteria == null || localizedCriteria.trim().isEmpty()) {
                        localizedCriteria = "";
                    }
                    timeCriteria = "<b>" + kmelia.getString("TimeAxis") + "</b> > " + localizedCriteria;
                }
            }
            request.setAttribute("selectedResultsWa", publicationsIds);
            request.setAttribute("Combination", combination);
            request.setAttribute("TimeCriteria", timeCriteria);
            // Go to importExportPeas
            destination = "/RimportExportPeas/jsp/KmaxExportPublications";
        } else if ("statistics".equals(function)) {
            destination = rootDestination + STATISTIC_REQUEST_HANDLER.handleRequest(request, function, kmelia);
        } else if ("statSelectionGroup".equals(function)) {
            destination = STATISTIC_REQUEST_HANDLER.handleRequest(request, function, kmelia);
        } else if ("SetPublicationValidator".equals(function)) {
            String userIds = request.getParameter("ValideurId");
            kmelia.setPublicationValidator(userIds);
            destination = getDestination("ViewPublication", kmelia, request);
        } else {
            destination = rootDestination + function;
        }

        if (profileError) {
            destination = ResourceLocator.getGeneralSettingBundle().getString("sessionTimeout");
        }
    } catch (Exception exceAll) {
        request.setAttribute("javax.servlet.jsp.jspException", exceAll);
        return "/admin/jsp/errorpageMain.jsp";
    }
    return destination;
}

From source file:de.xwic.appkit.core.model.queries.resolver.hbn.PropertyQueryResolver.java

/**
 * @param entityClass/*from  w w w  . j  a  va  2s. c om*/
 * @param query
 * @param justCount
 * @param customFromClauses
 * @param customWhereClauses
 * @param customValues
 * @return
 */
public String createHsqlQuery(Class<? extends Object> entityClass, PropertyQuery query, boolean justCount,
        List<QueryElement> values, List<String> customFromClauses, List<String> customWhereClauses,
        List<Object> customValues) {

    boolean checkPicklistJoin = query.isJoinPicklistEntries();

    StringBuffer sb = new StringBuffer();
    StringBuffer sbFrom = new StringBuffer();

    //see if we try to sort for a property1.attribute1
    Map<String, String> joinMap = new HashMap<String, String>();
    Map<String, String> remappedJoins = new HashMap<String, String>();

    String sortField = query.getSortField();
    if (null != sortField && sortField.indexOf('.') > 0) {
        // add the property to the left outer join properties
        addToJoin(sortField, joinMap, remappedJoins);
    }

    sbFrom.append(createFrom(query, entityClass, justCount));

    Map<String, String> joinPropertiesMap = query.getLeftOuterJoinPropertiesMap();
    for (Map.Entry<String, String> entry : joinPropertiesMap.entrySet()) {
        String alias = entry.getKey();
        String property = entry.getValue();
        add(property, alias, joinMap, remappedJoins);
    }

    // add all columns that are a referenced entity
    if (query.getColumns() != null && !query.getColumns().isEmpty()) {
        for (String prop : query.getColumns()) {
            addToJoin(prop, joinMap, remappedJoins);
        }
    }

    // add the joins
    for (Map.Entry<String, String> entry : joinMap.entrySet()) {
        String property = entry.getKey();
        String alias = entry.getValue();
        sbFrom.append("\n LEFT OUTER JOIN obj.").append(property).append(" ");
        if (isAliasRelevant(property, alias)) {
            // add alias
            sbFrom.append("AS ").append(alias).append(" ");
        }
    }

    //add custom registered from clauses 
    for (int i = 0; i < customFromClauses.size(); i++) {
        String customFrom = (String) customFromClauses.get(i);
        sbFrom.append(" ").append(customFrom).append(" ");
    }

    if (query.isHideDeleted()) {
        sb.append(" obj.deleted = 0 ");
        if (query.size() > 0) {
            sb.append("AND ");
        }
    }

    // build query
    //System.out.println(sb);

    buildQuery(sb, values, query, remappedJoins);

    int size = query.size();

    // add custom where clause parts

    for (int i = 0; i < customWhereClauses.size(); i++) {
        String customWhere = (String) customWhereClauses.get(i);
        if (!(size == 0 && i == 0 && !query.isHideDeleted())) {
            sb.append(" AND ");
        }
        sb.append(" ").append(customWhere).append(" ");
    }

    // add the order by part

    String orderBy = "";
    if (!justCount) {
        boolean hasCriteria = size != 0 || query.isHideDeleted();
        orderBy = addSortingClause(query, "obj", hasCriteria, sbFrom, entityClass);
    }

    if ((query.getColumns() == null || sbFrom.indexOf("obj.id") >= 0) && !justCount) { //sql server fix: you can have a column in "order by" only if it's present in the select clause
        if (query.isConsistentOrder() && orderBy.indexOf("obj.id") == -1) {
            if (orderBy.length() != 0) {
                orderBy += ", ";
            } else {
                orderBy = " order by ";
            }
            orderBy += "obj.id asc";
        }
    }

    if (checkPicklistJoin) {
        PicklistJoinQueryParser tescht = new PicklistJoinQueryParser(entityClass.getName(), sbFrom.toString(),
                sb.toString(), query.getLanguageId(), justCount);
        return tescht.toString() + " " + orderBy;
    } else {
        String erg = sbFrom + "\n" + (sb.length() != 0 ? " WHERE " : "") + sb.toString() + " " + orderBy;
        return erg;
    }
}