FileDocCategorySizeDatePackage
SetCommand.javaAPI DocJBoss 4.2.15720Fri Jul 13 21:02:16 BST 2007org.jboss.console.twiddle.command

SetCommand

public class SetCommand extends MBeanServerCommand
Set the values of one MBean attribute.
author
heiko.rupp@cellent.de
version
$Revision: 57269 $

Fields Summary
private ObjectName
objectName
private List
attributeNames
private boolean
prefix
private String
query
Constructors Summary
public SetCommand()


	 
	
		super("set", "Set the value of one MBean attribute");
	
Methods Summary
private java.lang.Objectconvert(java.lang.String val, java.lang.String oType)
Convert val into an Object of type type

param
val The given value
param
oType the wanted return type
return
the value in the correct representation
throws
Exception various :)

		PropertyEditor editor = PropertyEditors.getEditor(oType);
		editor.setAsText(val);
		return editor.getValue();		
	
public voiddisplayHelp()

		PrintWriter out = context.getWriter();

		out.println(desc);
		out.println();
		out.println("usage: " + name + " [options] <name> <attr> <val>");
		out.println("options:");
		out.println("    --noprefix    Do not display attribute name prefixes");
		out.println("    --            Stop processing options");

		out.flush();
   
public voidexecute(java.lang.String[] args)


		processArguments(args);
				
		String theAttr = (String)attributeNames.toArray()[0]; 
		String theVal = (String)attributeNames.toArray()[1]; 

		if (objectName == null)
			throw new CommandException("Missing object name");

		log.debug("attribute names: " + attributeNames);
		if (attributeNames.size() != 2 )
		{
			throw new CommandException("Wrong number of arguments");
		}
		MBeanServerConnection server = getMBeanServer();

		MBeanInfo info = server.getMBeanInfo(objectName);
		
		MBeanAttributeInfo[] attrs = info.getAttributes();
		
		MBeanAttributeInfo attr=null;
		
//		System.out.println("I am here shak's msg");

		boolean found = false;
		for (int i=0;i < attrs.length ; i++ ) 
		{			
			if (attrs[i].getName().equals(theAttr) && 
				attrs[i].isWritable()) {
				
					found=true;
					attr= attrs[i];
					break;
				}
		}
		
		if (found == false)
		{
			
			throw new CommandException("No matching attribute found");
		}
		else 
		{
			Object oVal = convert(theVal,attr.getType());
			Attribute at = new Attribute(theAttr,oVal);
			server.setAttribute(objectName,at);
			
			// read the attribute back from the server
			if (!context.isQuiet())
			{
				PrintWriter out = context.getWriter();
				Object nat = server.getAttribute(objectName,theAttr);
				if (nat==null)
					out.println("null");
				else 
					if (prefix)
						out.print(theAttr+"=");
					out.println(nat.toString());
			}
		}
		

   
private booleanprocessArguments(java.lang.String[] args)

		log.debug("processing arguments: " + Strings.join(args, ","));

		if (args.length == 0)
		{
			throw new CommandException("Command requires arguments");
		}

		String sopts = "-:";
		LongOpt[] lopts =
			{
				new LongOpt("noprefix", LongOpt.NO_ARGUMENT, null, 0x1000),
			};

		Getopt getopt = new Getopt(null, args, sopts, lopts);
		getopt.setOpterr(false);

		int code;
		int argidx = 0;

		while ((code = getopt.getopt()) != -1)
		{
			switch (code)
			{
				case ':":
					throw new CommandException
						("Option requires an argument: " + args[getopt.getOptind() - 1]);

				case '?":
            	{
					String arg = args[getopt.getOptind() - 1];

					argidx=setArgValues(argidx,arg);

					break;

					
            	}

				case 0x1000:
					prefix = false;
					break;
                  
					// non-option arguments
				case 1:
					{
						String arg = getopt.getOptarg();
						
						argidx=setArgValues(argidx,arg);

						break;
					}
			}
			
			
		}

		return true;
	
private intsetArgValues(int argdixValue, java.lang.String argValue)

	   
	   switch (argdixValue++)
		{
			case 0:
				objectName = createObjectName(argValue);
				log.debug("mbean name: " + objectName);
				break;

			default:
				log.debug("adding attribute name: " + argValue);
				attributeNames.add(argValue);
				break;
		}
	   
	   return argdixValue;