Skip to main content
summaryrefslogtreecommitdiffstats
blob: bdce004494beb59cb34bc8bcb13ea4fd9a84aa47 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
/*******************************************************************************
 * Copyright (c) 2002, 2004 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * 
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.wst.ws.internal.explorer.platform.wsdl.fragment.impl;

import java.util.Hashtable;
import java.util.Vector;
import org.eclipse.wst.ws.internal.explorer.platform.util.MultipartFormDataException;
import org.eclipse.wst.ws.internal.explorer.platform.util.MultipartFormDataParser;
import org.eclipse.wst.ws.internal.explorer.platform.util.XMLUtils;
import org.eclipse.wst.ws.internal.explorer.platform.wsdl.constants.FragmentConstants;
import org.eclipse.wst.ws.internal.explorer.platform.wsdl.fragment.XSDToFragmentConfiguration;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class XSDDefaultFragment extends XSDFragment {
  public XSDDefaultFragment(String id, String name, XSDToFragmentConfiguration config) {
    super(id, name, config);
  }

  public boolean processParameterValues(MultipartFormDataParser parser) throws MultipartFormDataException {
    String[] param = new String[1];
    param[0] = parser.getParameter(getID());
    setParameterValues(getID(), param);
    return isElement(addRootElement(param[0]));
  }

  private String addRootElement(String element) {
    StringBuffer sb = new StringBuffer();
    sb.append(FragmentConstants.ROOT_ELEMENT_START_TAG);
    sb.append(element);
    sb.append(FragmentConstants.ROOT_ELEMENT_END_TAG);
    return sb.toString();
  }

  private boolean isElement(String elementString) {
    try {
      return (XMLUtils.stringToElement(elementString) != null);
    }
    catch (Throwable t) {
      return false;
    }
  }

  public boolean validateAllParameterValues() {
    String param = getParameterValue(getID(), 0);
    return (param == null || isElement(addRootElement(param)));
  }

  public boolean validateParameterValues(String paramKey) {
    String param = getParameterValue(getID(), 0);
    return (param == null || isElement(addRootElement(param)));
  }

  public boolean validateParameterValue(String paramKey, int paramIndex) {
    String param = getParameterValue(getID(), 0);
    return (param == null || isElement(addRootElement(param)));
  }

  public boolean setParameterValuesFromInstanceDocuments(Element[] instanceDocuments) {
    StringBuffer sb = new StringBuffer();
    boolean paramValid = true;
    for (int i = 0; i < instanceDocuments.length; i++) {
      String instanceString = XMLUtils.serialize(instanceDocuments[i], true);
      if (instanceString != null && instanceString.length() > 0)
        sb.append(instanceString);
      else
        paramValid = false;
    }
    String[] param = {sb.toString()};
    setParameterValues(getID(), param);
    return paramValid;
  }

  public Element[] genInstanceDocumentsFromParameterValues(boolean genXSIType, Hashtable namespaceTable, Document doc) {
    String param = getParameterValue(getID(), 0);
    if (param == null)
      return new Element[0];
    Element root;
    try {
      root = (Element)doc.importNode(XMLUtils.stringToElement(addRootElement(param)), true);
    }
    catch (Throwable t) {
      return new Element[0];
    }
    NodeList nl = root.getChildNodes();
    Vector instanceDocumentVector = new Vector();
    for (int i = 0; i < nl.getLength(); i++) {
      Node node = nl.item(i);
      if (node instanceof Element)
        instanceDocumentVector.add(node);
    }
    Element[] instanceDocuments = new Element[instanceDocumentVector.size()];
    for (int i = 0; i < instanceDocuments.length; i++) {
      instanceDocuments[i] = (Element)instanceDocumentVector.get(i);
    }
    return instanceDocuments;
  }

  public String getInformationFragment() {
    return "/wsdl/fragment/XSDDefaultInfoFragmentJSP.jsp";
  }

  public String getReadFragment() {
    return "/wsdl/fragment/XSDDefaultRFragmentJSP.jsp";
  }

  public String getWriteFragment() {
    return "/wsdl/fragment/XSDDefaultWFragmentJSP.jsp";
  }
}

Back to the top