/******************************************************************************* * Copyright (c) 2012 Google, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Google, Inc. - initial API and implementation *******************************************************************************/ package com.windowtester.codegen; import java.util.Collection; import java.util.Iterator; import java.util.LinkedHashSet; import java.util.Set; import com.windowtester.codegen.assembly.unit.ClassUnit; import com.windowtester.codegen.assembly.unit.FieldUnit; import com.windowtester.codegen.assembly.unit.ImportUnit; import com.windowtester.codegen.assembly.unit.MethodUnit; /** * A base class for source builders. */ public abstract class SourceTypeBuilder implements ISourceTypeBuilder { /** This type's defined methods */ private Collection /*MethodUnit*/ _methods; /** This type's defined fields */ private Collection /*FieldUnit*/ _fields; /** This type's defined imports */ private Collection /*ImportUnit*/ _imports; /** This type's defined classes */ private Collection /*ClassUnit*/ _classes; /** This type's base class */ private String _extends; /** This type's name */ private String _name; /** This type's package */ private String _pkg; /**The cuurrent active shell title */ private String _shellTitle; /** * Create an instance. * @param name - the name of the test case * @param pkg - the package of the test case */ public SourceTypeBuilder(String name, String pkg) { _name = name; _pkg = pkg; } /* (non-Javadoc) * @see com.windowtester.codegen.ISourceTypeBuilder#hasMethod(com.windowtester.codegen.assembly.unit.MethodUnit) */ public boolean hasMethod(MethodUnit method) { return getMethods().contains(method); } /* (non-Javadoc) * @see com.windowtester.codegen.ISourceTypeBuilder#addMethod(com.windowtester.codegen.assembly.unit.MethodUnit) */ public boolean addMethod(MethodUnit method) { return (method == null) ? false : getMethods().add(method); } /* (non-Javadoc) * @see com.windowtester.codegen.ISourceTypeBuilder#addClass(com.windowtester.codegen.assembly.unit.ClassUnit) */ public boolean addClass(ClassUnit cls) { return (cls == null || hasClass(cls)) ? false : getClasses().add(cls); } /* (non-Javadoc) * @see com.windowtester.codegen.ISourceTypeBuilder#hasClass(com.windowtester.codegen.assembly.unit.ClassUnit) */ public boolean hasClass(ClassUnit cls) { //TODO: push into a ClassSet abstraction for (Iterator iter = getClasses().iterator(); iter.hasNext();) { ClassUnit unit = (ClassUnit) iter.next(); if (unit.getName().equals(cls.getName())) return true; } return false; } /* (non-Javadoc) * @see com.windowtester.codegen.ISourceTypeBuilder#hasField(com.windowtester.codegen.assembly.unit.FieldUnit) */ public boolean hasField(FieldUnit field) { return getFields().contains(field); } /* (non-Javadoc) * @see com.windowtester.codegen.ISourceTypeBuilder#addField(com.windowtester.codegen.assembly.unit.FieldUnit) */ public boolean addField(FieldUnit field) { return getFields().add(field); } /* (non-Javadoc) * @see com.windowtester.codegen.ISourceTypeBuilder#hasImport(com.windowtester.codegen.assembly.unit.ImportUnit) */ public boolean hasImport(ImportUnit imprt) { return getImports().contains(imprt); } /* (non-Javadoc) * @see com.windowtester.codegen.ISourceTypeBuilder#addImport(com.windowtester.codegen.assembly.unit.ImportUnit) */ public boolean addImport(ImportUnit imprt) { return getImports().add(imprt); } /** * Set this type's base class. * @param ext */ public void setExtends(String ext) { _extends = ext; } /** * @return this type's base class */ public String getExtends() { return _extends; } /** * @return the currently defined methods */ public Collection getMethods() { if (_methods == null) _methods = newSet(); return _methods; } /** * Return a new Set-based collection. * @return a new set */ private Set newSet() { //using a LinkedHashSet for its predictable (insertion-order) ordering return new LinkedHashSet(); } /** * @return the currently defined fields */ public Collection getFields() { if (_fields == null) _fields = newSet(); return _fields; } /** * @return the currently defined imports */ public Collection getImports() { if (_imports == null) _imports = newSet(); return _imports; } /** * @return the currently defined inner classes */ public Collection getClasses() { if (_classes == null) _classes = newSet(); return _classes; } /** * @return Returns the name of the source type being built. */ public String getName() { return _name; } /** * @param name - the name to set. */ public void setName(String name) { _name = name; } /** * @return Returns the type's package. */ public String getPackage() { return _pkg; } /** * @param pkg The pkg name to set. */ public void setPackage(String pkg) { _pkg = pkg; } /* (non-Javadoc) * @see com.windowtester.codegen.ISourceTypeBuilder#getCurrentShellTitle() */ public String getCurrentShellTitle() { return _shellTitle; } /* (non-Javadoc) * @see com.windowtester.codegen.ISourceTypeBuilder#updateCurrentShellTitle(java.lang.String) */ public boolean updateCurrentShellTitle(String shellTitle) { boolean hasChanged = (_shellTitle == null) ? (shellTitle == null) : !_shellTitle.equals(shellTitle); _shellTitle = shellTitle; return hasChanged; } }