/*
*
*/
package uk.ac.ebi.fg.myequivalents.cmdline;
import static java.lang.System.err;
import org.apache.commons.cli.OptionBuilder;
import org.apache.commons.cli.Options;
import org.apache.commons.lang3.ArrayUtils;
import uk.ac.ebi.fg.myequivalents.managers.interfaces.AccessControlManager;
import uk.ac.ebi.fg.myequivalents.utils.jaxb.DateJaxbXmlAdapter;
/**
* This is a base class used for 'set visibility ..." commands in {@link AccessControlManager}.
*
* <dl><dt>date</dt><dd>Jul 31, 2012</dd></dl>
* @author Marco Brandizi
*
*/
public abstract class AbstractVisibilitySetLineCommand extends LineCommand
{
public AbstractVisibilitySetLineCommand ( String commandString )
{
super ( commandString );
}
@Override
public void run ( String... args )
{
super.run ( args );
if ( this.exitCode != 0 ) return;
args = cmdLine.getArgs ();
if ( args != null && args.length > 3 )
{
String publicFlagStr = cmdLine.getOptionValue ( 'p' );
String relDateStr = cmdLine.getOptionValue ( 'd' );
boolean cascade = cmdLine.hasOption ( 'x' );
doVisibilitySet ( publicFlagStr, relDateStr, cascade, (String[]) ArrayUtils.subarray ( args, 3, args.length ) );
}
err.println ( "\nVisibility command executed." );
return;
}
protected abstract void doVisibilitySet ( String publicFlagStr, String releaseDateStr, boolean cascade, String ... entityNames );
@Override
@SuppressWarnings ( "static-access" )
protected Options getOptions ()
{
return super.getOptions ()
.addOption ( OptionBuilder
.withDescription ( "Public flag (visibility commands, see documentation)" )
.withLongOpt ( "public-flag" )
.hasArg ( true )
.withArgName ( "true|false|null" )
.create ( 'p' )
)
.addOption ( OptionBuilder
.withDescription ( "Release date (visibility commands, see documentation)" )
.hasArg ( true )
.withLongOpt ( "release-date" )
.withArgName ( DateJaxbXmlAdapter.DATE_FMT_REPRESENTATION )
.create ( 'd' )
)
.addOption ( OptionBuilder
.withDescription ( "Cascades the visibility settings to referring elements (e.g., from services to entitities)" )
.withLongOpt ( "cascade" )
.create ( 'x' )
);
}
@Override
public void printUsage ()
{
String typeStr = this.commandString.split ( " " ) [ 0 ];
String typeStrUI = "entity".equals ( typeStr ) ? "<service:accession|uri>" : "name";
err.format ( "\n %s %s...\n", this.commandString, typeStrUI );
err.format ( " Set %s visibility.\n", typeStr );
}
}