/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright (c) 2008-2010 Oracle and/or its affiliates. All rights reserved.
*
* The contents of this file are subject to the terms of either the GNU
* General Public License Version 2 only ("GPL") or the Common Development
* and Distribution License("CDDL") (collectively, the "License"). You
* may not use this file except in compliance with the License. You can
* obtain a copy of the License at
* https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
* or packager/legal/LICENSE.txt. See the License for the specific
* language governing permissions and limitations under the License.
*
* When distributing the software, include this License Header Notice in each
* file and include the License file at packager/legal/LICENSE.txt.
*
* GPL Classpath Exception:
* Oracle designates this particular file as subject to the "Classpath"
* exception as provided by Oracle in the GPL Version 2 section of the License
* file that accompanied this code.
*
* Modifications:
* If applicable, add the following below the License Header, with the fields
* enclosed by brackets [] replaced by your own identifying information:
* "Portions Copyright [year] [name of copyright owner]"
*
* Contributor(s):
* If you wish your version of this file to be governed by only the CDDL or
* only the GPL Version 2, indicate your decision by adding "[Contributor]
* elects to include this software in this distribution under the [CDDL or GPL
* Version 2] license." If you don't indicate a single choice of license, a
* recipient has the option to distribute your version of this file under
* either the CDDL, the GPL Version 2 or to extend the choice of license to
* its licensees as provided above. However, if you add GPL Version 2 code
* and therefore, elected the GPL Version 2 license, then the option applies
* only if the new code is made subject to such option by the copyright
* holder.
*/
package com.sun.enterprise.admin.remote;
import com.sun.enterprise.universal.NameValue;
import com.sun.enterprise.universal.glassfish.AdminCommandResponse;
import java.util.*;
/**
*
* @author bnevins
*/
class GeneratedManPageManager implements ResponseManager{
GeneratedManPageManager(AdminCommandResponse response) {
this.response = response;
}
public void process() throws RemoteException {
String usageText = response.getValue(AdminCommandResponse.SYNOPSIS);
if(usageText == null) {
// this is one way to figure out there was an error!
throw new RemoteFailureException("XXXXXXXXXXXXXXXXXXXX",
response.getMainMessage());
}
setName();
setSynopsis();
setParamsAndOperands();
StringBuilder sb = new StringBuilder();
sb.append(EOL);
printName(sb);
printSynopsis(sb);
printParams(sb);
printOperands(sb);
throw new RemoteSuccessException(sb.toString());
}
private void setName() {
name = displayInProperLen(response.getMainMessage());
}
private void printName(StringBuilder sb) {
sb.append("NAME :").append(EOL);
sb.append(name).append(EOL);
}
private void setSynopsis() {
synopsis = response.getValue(AdminCommandResponse.SYNOPSIS);
if (synopsis.startsWith("Usage: ")) {
synopsis = synopsis.substring(7);
}
// this looks too horrible - go with one long line...
//synopsis = displayInProperLen(synopsis);
}
private void printSynopsis(StringBuilder sb) {
sb.append("SYNOPSIS :").append(EOL);
sb.append(TAB).append(synopsis).append(EOL);
sb.append(EOL);
}
private void setParamsAndOperands() {
List<NameValue<String,String>> list = response.getMainKeys();
for(NameValue<String,String> nv : list) {
String name = nv.getName();
if(name.equals(AdminCommandResponse.SYNOPSIS))
continue;
if(name.endsWith("operand"))
operands.add(nv);
else
params.add(nv);
}
}
private void printParams(StringBuilder sb) {
sb.append("OPTIONS :").append(EOL);
for(NameValue<String,String> nv : params) {
sb.append(TAB + "--").append(nv.getName()).append(EOL);
sb.append(displayInProperLen(nv.getValue()));
sb.append(EOL);
}
}
private void printOperands(StringBuilder sb) {
sb.append("OPERANDS :").append(EOL);
for(NameValue<String,String> nv : operands) {
String key = nv.getName();
// peel off "_operand"
key = key.substring(0, key.length() - 8);
String value = nv.getValue();
sb.append(displayInProperLen(key + " - " + value));
sb.append(EOL);
}
}
// bnevins -- original code reused, this looks painful to change...
private String displayInProperLen(String strToDisplay) {
int index = 0;
StringBuilder sb = new StringBuilder();
for (int ii=0; ii+70<strToDisplay.length();ii+=70) {
index=ii+70;
String subStr = strToDisplay.substring(ii, index+1);
if (subStr.endsWith(" ") || subStr.endsWith(",") ||
subStr.endsWith(".") || subStr.endsWith("-") ) {
sb.append(TAB + subStr + EOL);
ii++;
index++;
} else {
sb.append(TAB + strToDisplay.substring(ii, index) + "-" + EOL);
}
}
if (index < strToDisplay.length()) {
sb.append(TAB + strToDisplay.substring(index) + EOL);
}
return sb.toString();
}
AdminCommandResponse response;
private String name;
private String synopsis;
List<NameValue<String,String>> params = new LinkedList<NameValue<String,String>>();
List<NameValue<String,String>> operands = new LinkedList<NameValue<String,String>>();
private static final String TAB = " ";
private static final String EOL = System.getProperty("line.separator");
}
/*
-------- RESPONSE DUMP --------------
Signature-Version: 1.0
keys: GeneratedHelp;connectionpoolid;enabled;description;jndi_name_ope
rand;property;target;SYNOPSYS
enabled_value: Determines whether the JDBC resource is enabled at runt
ime. The default value is true.
SYNOPSYS_name: SYNOPSYS
target_name: target
message: create-jdbc-resource - creates a JDBC resource with the speci
fied JNDI name
connectionpoolid_value: The name of the JDBC connection pool. If two o
r more JDBC resource elements point to the same connection pool eleme
nt, they use the same pool connection at runtime.
description_value: Text providing descriptive details about the JDBC r
esource.
property_value:
jndi_name_operand_name: jndi_name_operand
enabled_name: enabled
exit-code: SUCCESS
property_name: property
GeneratedHelp_value: true
SYNOPSYS_value: Usage: create-jdbc-resource --connectionpoolid=connect
ionpoolid [--enabled=true] [--description=description] [--property=pr
operty] [--target=server] jndi_name
GeneratedHelp_name: GeneratedHelp
connectionpoolid_name: connectionpoolid
description_name: description
jndi_name_operand_value: The JNDI name of this JDBC resource.
target_value:
----------------------------------------------
NAME :
create-jdbc-resource - creates a JDBC resource with the specified JNDI
name
SYNOPSIS :
create-jdbc-resource --connectionpoolid=connectionpoolid [--enabled=true] [--description=description] [--property=property] [--target=server] jndi_name
OPTIONS :
--GeneratedHelp
true
--connectionpoolid
The name of the JDBC connection pool. If two or more JDBC resource ele-
ments point to the same connection pool element, they use the same poo-
l connection at runtime.
--enabled
Determines whether the JDBC resource is enabled at runtime. The defaul-
t value is true.
--description
Text providing descriptive details about the JDBC resource.
--property
--target
OPERANDS :
jndi_name - The JNDI name of this JDBC resource.
Command create-jdbc-resource executed successfully.
*/