GUAC-800: Migrate to JSON for protocol descriptions. Use full Forms instead of simply Fields for protocol parameters (allow sections).

This commit is contained in:
Michael Jumper
2015-05-25 19:56:53 -07:00
parent 96f5ab1bbd
commit 43fab89ecf
31 changed files with 1271 additions and 877 deletions

View File

@@ -1,65 +0,0 @@
/*
* Copyright (C) 2013 Glyptodon LLC
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package org.glyptodon.guacamole.xml.protocol;
import org.glyptodon.guacamole.form.ParameterOption;
import org.glyptodon.guacamole.xml.TagHandler;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
/**
* TagHandler for the "option" element.
*
* @author Mike Jumper
*/
public class OptionTagHandler implements TagHandler {
/**
* The option backing this option tag.
*/
private ParameterOption option = new ParameterOption();
@Override
public void init(Attributes attributes) throws SAXException {
option.setValue(attributes.getValue("value"));
}
@Override
public TagHandler childElement(String localName) throws SAXException {
throw new SAXException("The 'param' tag can contain no elements.");
}
@Override
public void complete(String textContent) throws SAXException {
option.setTitle(textContent);
}
/**
* Returns the ParameterOption backing this tag.
* @return The ParameterOption backing this tag.
*/
public ParameterOption asParameterOption() {
return option;
}
}

View File

@@ -1,124 +0,0 @@
/*
* Copyright (C) 2013 Glyptodon LLC
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package org.glyptodon.guacamole.xml.protocol;
import org.glyptodon.guacamole.form.Parameter;
import org.glyptodon.guacamole.xml.TagHandler;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
/**
* TagHandler for the "param" element.
*
* @author Mike Jumper
*/
public class ParamTagHandler implements TagHandler {
/**
* The Parameter backing this tag handler.
*/
private Parameter protocolParameter = new Parameter();
@Override
public void init(Attributes attributes) throws SAXException {
protocolParameter.setName(attributes.getValue("name"));
protocolParameter.setTitle(attributes.getValue("title"));
protocolParameter.setValue(attributes.getValue("value"));
// Parse type
String type = attributes.getValue("type");
// Text field
if ("text".equals(type))
protocolParameter.setType(Parameter.Type.TEXT);
// Numeric field
else if ("numeric".equals(type))
protocolParameter.setType(Parameter.Type.NUMERIC);
// Username field
else if ("username".equals(type))
protocolParameter.setType(Parameter.Type.USERNAME);
// Password field
else if ("password".equals(type))
protocolParameter.setType(Parameter.Type.PASSWORD);
// Enumerated field
else if ("enum".equals(type))
protocolParameter.setType(Parameter.Type.ENUM);
// Multiline field
else if ("multiline".equals(type))
protocolParameter.setType(Parameter.Type.MULTILINE);
// Boolean field
else if ("boolean".equals(type)) {
protocolParameter.setType(Parameter.Type.BOOLEAN);
if(protocolParameter.getValue() == null)
throw new SAXException
("A value is required for the boolean parameter type.");
}
// Otherwise, fail with unrecognized type
else
throw new SAXException("Invalid parameter type: " + type);
}
@Override
public TagHandler childElement(String localName) throws SAXException {
// Start parsing of option tags
if (localName.equals("option")) {
// Get tag handler for option tag
OptionTagHandler tagHandler = new OptionTagHandler();
// Store stub in options collection
protocolParameter.getOptions().add(
tagHandler.asParameterOption());
return tagHandler;
}
return null;
}
@Override
public void complete(String textContent) throws SAXException {
// Do nothing
}
/**
* Returns the Parameter backing this tag.
* @return The Parameter backing this tag.
*/
public Parameter asParameter() {
return protocolParameter;
}
}

View File

@@ -1,81 +0,0 @@
/*
* Copyright (C) 2013 Glyptodon LLC
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package org.glyptodon.guacamole.xml.protocol;
import org.glyptodon.guacamole.protocols.ProtocolInfo;
import org.glyptodon.guacamole.xml.TagHandler;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
/**
* TagHandler for the "protocol" element.
*
* @author Mike Jumper
*/
public class ProtocolTagHandler implements TagHandler {
/**
* The ProtocolInfo object which will contain all data parsed by this tag
* handler.
*/
private ProtocolInfo info = new ProtocolInfo();
@Override
public void init(Attributes attributes) throws SAXException {
info.setName(attributes.getValue("name"));
info.setTitle(attributes.getValue("title"));
}
@Override
public TagHandler childElement(String localName) throws SAXException {
// Start parsing of param tags, add to list of all parameters
if (localName.equals("param")) {
// Get tag handler for param tag
ParamTagHandler tagHandler = new ParamTagHandler();
// Store stub in parameters collection
info.getParameters().add(tagHandler.asParameter());
return tagHandler;
}
return null;
}
@Override
public void complete(String textContent) throws SAXException {
// Do nothing
}
/**
* Returns the ProtocolInfo backing this tag.
* @return The ProtocolInfo backing this tag.
*/
public ProtocolInfo asProtocolInfo() {
return info;
}
}

View File

@@ -1,28 +0,0 @@
/*
* Copyright (C) 2013 Glyptodon LLC
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
/**
* Classes related to parsing XML files which describe the parameters of a
* protocol.
*/
package org.glyptodon.guacamole.xml.protocol;