/*
* Copyright 2013-2017 Grzegorz Ligas <ligasgr@gmail.com> and other contributors
* (see the CONTRIBUTORS file).
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.intellij.xquery.runner.rt;
import java.util.ArrayList;
import java.util.List;
public class XQueryRunConfigBuilder {
private String typeName;
private String mainFileName;
private String contextItemType;
private String contextItemValue;
private List<XQueryRunnerVariable> variables = new ArrayList<XQueryRunnerVariable>();
private String host;
private String port;
private String username;
private String password;
private boolean connectionDataIsAvailable;
private String databaseName;
private boolean debug;
private String debugPort;
private XQueryRunConfigBuilder() {
}
public static XQueryRunConfigBuilder runConfig() {
return new XQueryRunConfigBuilder();
}
public XQueryRunConfigBuilder withTypeName(String typeName) {
this.typeName = typeName;
return this;
}
public XQueryRunConfigBuilder withMainFileName(String mainFileName) {
this.mainFileName = mainFileName;
return this;
}
public XQueryRunConfigBuilder withContextItemType(String contextItemType) {
this.contextItemType = contextItemType;
return this;
}
public XQueryRunConfigBuilder withContextItemValue(String contextItemValue) {
this.contextItemValue = contextItemValue;
return this;
}
public XQueryRunConfigBuilder withVariable(String name, String value, String type) {
XQueryRunnerVariable variable = new XQueryRunnerVariable();
variable.ACTIVE = true;
variable.NAME = name;
variable.VALUE = value;
variable.TYPE = type;
variables.add(variable);
return this;
}
public XQueryRunConfigBuilder withConnectionData(String host, String port, String username, String password) {
this.host = host;
this.port = port;
this.username = username;
this.password = password;
connectionDataIsAvailable = true;
return this;
}
public XQueryRunConfigBuilder withDatabase(String databaseName) {
this.databaseName = databaseName;
return this;
}
public XQueryRunConfigBuilder withDebug(boolean debug) {
this.debug = debug;
return this;
}
public XQueryRunConfigBuilder withDebugPort(String debugPort) {
this.debugPort = debugPort;
return this;
}
public String build() {
return "<run debug=\"" + debug + "\" debugPort=\"" + debugPort + "\" >\n" +
"<xQueryConfiguration " +
"mainFileName=\"" + mainFileName + "\" " +
contextItemType() +
">" +
contextItemValue() +
"</xQueryConfiguration>\n" +
variables() +
"<data-source-configuration " +
"type=\"" + typeName + "\" " +
connectionData() +
databaseName() +
"/>\n" +
"</run>\n";
}
private String databaseName() {
if (databaseName != null) {
return "databaseName=\"" + databaseName + "\"";
}
return "";
}
private String connectionData() {
if (connectionDataIsAvailable) {
return "host=\"" + host + "\"" +
" port=\"" + port + "\"" +
" username=\"" + username + "\"" +
" password=\"" + password + "\"";
}
return "";
}
private String variables() {
if (variables.isEmpty()) {
return "";
}
StringBuffer sb = new StringBuffer("<variables><list>");
for (XQueryRunnerVariable v : variables) {
sb.append("<variable name=\"" + v.NAME + "\" active=\"" + v.ACTIVE + "\" type=\"" + v.TYPE + "\">"
+ v.VALUE +
"</variable>");
}
sb.append("</list></variables>");
return sb.toString();
}
private String contextItemValue() {
return (contextItemValue != null
? "<contextItemText>" + contextItemValue + "</contextItemText>"
: "");
}
private String contextItemType() {
return (contextItemType != null
? "contextItemEnabled=\"true\" contextItemFromEditorEnabled=\"true\" contextItemType=\"" +
contextItemType + "\""
: "contextItemEnabled=\"false\"");
}
}