package gov.nasa.jpl.mbee.mdk.model; import com.nomagic.magicdraw.actions.MDAction; import gov.nasa.jpl.mbee.mdk.docgen.docbook.DocumentElement; import gov.nasa.jpl.mbee.mdk.generator.Generatable; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; /** * <p> * This class should be extended if writing java extensions, or any of its * subclass like Table * </p> * * @author dlam */ public abstract class Query extends DocGenElement implements Generatable { /** * The elements passed into this query. These are magicdraw elements * resulting from collect/filter/sort actions */ protected List<Object> targets; protected List<String> titles; protected boolean sortElementsByName = false; public void setTargets(List<Object> t) { targets = t; } public List<Object> getTargets() { return targets; } public void setTitles(List<String> t) { titles = t; } public List<String> getTitles() { return titles; } public boolean isSortElementsByName() { return sortElementsByName; } public void setSortElementsByName(boolean sortElementsByName) { this.sortElementsByName = sortElementsByName; } /** * This is called after the query object has been constructed and the * targets and dgElement fields are set */ @Override public void initialize() { } /** * This method must be overidden by subclasses to return the result of the * query */ @Override public List<DocumentElement> visit(boolean forViewEditor, String outputDir) { return new ArrayList<DocumentElement>(); } /** * This is called after initialize */ @Override public void parse() { } /** * <p> * These actions will show up as menu items under View Interaction, if the * user right clicks on a view that will execute this query * </p> * <p> * targets and dgElement would have been filled * </p> */ @Override public List<MDAction> getActions() { return new ArrayList<MDAction>(); } @Override public void accept(IModelVisitor visitor) { visitor.visit(this); } protected static HashSet<Field> notToStringSet = new HashSet<Field>() { private static final long serialVersionUID = -2943965696220565323L; { try { //add(Query.class.getField( "sortElementsByName" )); } catch (Exception e) { e.printStackTrace(); } } }; protected Set<Field> notToString() { return notToStringSet; } @Override public String toStringStart() { StringBuffer sb = new StringBuffer(); sb.append(super.toStringStart()); for (Field f : getClass().getDeclaredFields()) { if (notToString().contains(f)) { continue; } f.setAccessible(true); try { sb.append("," + f.getName() + "=" + f.get(this)); } catch (IllegalArgumentException e) { } catch (IllegalAccessException e) { } } return sb.toString(); } }