/* This file is part of the db4o object database http://www.db4o.com Copyright (C) 2004 - 2011 Versant Corporation http://www.versant.com db4o is free software; you can redistribute it and/or modify it under the terms of version 3 of the GNU General Public License as published by the Free Software Foundation. db4o is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ package com.db4o.ta.instrumentation.ant; import java.util.*; import org.apache.tools.ant.*; import org.apache.tools.ant.types.*; import org.apache.tools.ant.util.regexp.*; import com.db4o.instrumentation.ant.*; import com.db4o.instrumentation.classfilter.*; import com.db4o.instrumentation.core.*; import com.db4o.ta.instrumentation.*; /** * @exclude */ public class TAAntClassEditFactory extends ProjectComponent implements AntClassEditFactory { private final List _regExp = new ArrayList(); private final List _filters = new ArrayList(); private final boolean _withCollections; public TAAntClassEditFactory() { this(true); } public TAAntClassEditFactory(boolean withCollections) { _withCollections = withCollections; } public RegularExpression createRegexp() { RegularExpression regExp = new RegularExpression(); _regExp.add(regExp); return regExp; } public void add(ClassFilter classFilter) { _filters.add(classFilter); } public BloatClassEdit createEdit(ClassFilter clazzFilter) { final List filters = new ArrayList(2); for (Iterator filterIter = _filters.iterator(); filterIter.hasNext();) { ClassFilter filter = (ClassFilter) filterIter.next(); filters.add(filter); } if(!_regExp.isEmpty()) { Regexp[] regExp = new Regexp[_regExp.size()]; int idx = 0; for (Iterator reIter = _regExp.iterator(); reIter.hasNext();) { RegularExpression re = (RegularExpression) reIter.next(); regExp[idx++] = re.getRegexp(getProject()); } filters.add(new AntRegExpClassFilter(regExp)); } ClassFilter userClassFilter = null; switch(filters.size()) { case 0: userClassFilter = new AcceptAllClassesFilter(); break; case 1: userClassFilter = (ClassFilter) filters.get(0); break; default: userClassFilter = new CompositeOrClassFilter((ClassFilter[]) filters.toArray(new ClassFilter[filters.size()])); } if(clazzFilter != null) { userClassFilter = new CompositeAndClassFilter(new ClassFilter[]{ clazzFilter, userClassFilter }); } return new InjectTransparentActivationEdit(userClassFilter, _withCollections); } }