http://git-wip-us.apache.org/repos/asf/cayenne/blob/276f049c/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/FiltersConfigBuilder.java ---------------------------------------------------------------------- diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/FiltersConfigBuilder.java b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/FiltersConfigBuilder.java new file mode 100644 index 0000000..8ccbe7a --- /dev/null +++ b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/FiltersConfigBuilder.java @@ -0,0 +1,169 @@ +/***************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + ****************************************************************/ +package org.apache.cayenne.tools.dbimport.config; + +import static org.apache.cayenne.access.loader.filters.FilterFactory.NULL; +import static org.apache.cayenne.access.loader.filters.FilterFactory.TRUE; + +import java.lang.reflect.Method; +import java.util.Collection; +import java.util.LinkedList; +import java.util.List; + +import org.apache.cayenne.access.loader.filters.DbPath; +import org.apache.cayenne.access.loader.filters.EntityFilters; +import org.apache.cayenne.access.loader.filters.Filter; +import org.apache.cayenne.access.loader.filters.FilterFactory; +import org.apache.cayenne.access.loader.filters.FiltersConfig; +import org.apache.cayenne.access.loader.filters.ListFilter; + +/** +* @since 3.2. +*/ +public final class FiltersConfigBuilder { + + private final ReverseEngineering engineering; + private final List<EntityFilters> filters = new LinkedList<EntityFilters>(); + + public FiltersConfigBuilder(ReverseEngineering engineering) { + this.engineering = engineering; + } + + public FiltersConfigBuilder add(EntityFilters filter) { + if (!filter.getDbPath().equals(new DbPath()) && !filter.isEmpty()) { + this.filters.add(filter); + } + + return this; + } + + public FiltersConfig filtersConfig() { + DbPath path = new DbPath(); + + filters.addAll(processFilters(path, engineering)); + filters.addAll(processSchemas(path, engineering.getSchemas())); + filters.addAll(processCatalog(path, engineering.getCatalogs())); + + if (filters.isEmpty()) { + filters.add(defaultFilter(path)); + } + return new FiltersConfig(filters); + } + + private EntityFilters defaultFilter(DbPath path) { + return new EntityFilters(path, TRUE, TRUE, NULL); + } + + private Collection<? extends EntityFilters> processSchemas(DbPath root, Collection<Schema> schemas) { + List<EntityFilters> filters = new LinkedList<EntityFilters>(); + for (Schema schema : schemas) { + DbPath path = new DbPath(root.catalog, schema.getName()); + List<EntityFilters> schemaFilters = processFilters(path, schema); + if (schemaFilters.isEmpty()) { + schemaFilters.add(defaultFilter(path)); + } + + filters.addAll(schemaFilters); + } + + return filters; + } + + private Collection<? extends EntityFilters> processCatalog(DbPath root, Collection<Catalog> catalogs) { + List<EntityFilters> filters = new LinkedList<EntityFilters>(); + for (Catalog catalog: catalogs) { + DbPath path = new DbPath(catalog.getName()); + + List<EntityFilters> catalogFilters = new LinkedList<EntityFilters>(); + catalogFilters.addAll(processFilters(path, catalog)); + catalogFilters.addAll(processSchemas(path, catalog.getSchemas())); + + if (catalogFilters.isEmpty()) { + catalogFilters.add(defaultFilter(path)); + } + + filters.addAll(catalogFilters); + } + + return filters; + } + + private List<EntityFilters> processFilters(DbPath root, FilterContainer container) { + LinkedList<EntityFilters> res = new LinkedList<EntityFilters>(); + res.addAll(processTableFilters(root, container.getIncludeTables())); + + EntityFilters filter = new EntityFilters( + root, + processIncludes(container.getIncludeTables()).join(processExcludes(container.getExcludeTables())), + processIncludes(container.getIncludeColumns()).join(processExcludes(container.getExcludeColumns())), + processIncludes(container.getIncludeProcedures()).join(processExcludes(container.getExcludeProcedures())) + ); + + if (!filter.isEmpty()) { + res.add(filter); + } + + return res; + } + + private List<EntityFilters> processTableFilters(DbPath root, Collection<IncludeTable> tables) { + List<EntityFilters> list = new LinkedList<EntityFilters>(); + for (IncludeTable includeTable : tables) { + Filter<String> filter = TRUE + .join(processIncludes(includeTable.getIncludeColumns())) + .join(processExcludes(includeTable.getExcludeColumns())); + + DbPath dbPath = new DbPath(root.catalog, root.schema, includeTable.getPattern()); + list.add(new EntityFilters(dbPath, NULL, filter, NULL)); + } + return list; + } + + private Filter<String> processIncludes(Collection<? extends PatternParam> filters) { + return processFilters("include", filters); + } + + private Filter<String> processExcludes(Collection<? extends PatternParam> excludeProcedures) { + return processFilters("exclude", excludeProcedures); + } + + private Filter<String> processFilters(String factoryMethodName, Collection<? extends PatternParam> includeProcedures) { + Method factoryMethod; + try { + factoryMethod = FilterFactory.class.getMethod(factoryMethodName, String.class); + } catch (NoSuchMethodException e) { + throw new IllegalStateException(e); + } + + Collection<Filter<String>> filters = new LinkedList<Filter<String>>(); + for (PatternParam includeProcedure : includeProcedures) { + try { + filters.add((Filter<String>) factoryMethod.invoke(FilterFactory.class, includeProcedure.getPattern())); + } catch (Exception e) { + // TODO log / process exact parsing exception + e.printStackTrace(); + } + } + + if (filters.isEmpty()) { + return NULL; + } + return new ListFilter<String>(filters); + } +}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/276f049c/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/IncludeColumn.java ---------------------------------------------------------------------- diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/IncludeColumn.java b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/IncludeColumn.java new file mode 100644 index 0000000..46b5672 --- /dev/null +++ b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/IncludeColumn.java @@ -0,0 +1,31 @@ +/***************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + ****************************************************************/ +package org.apache.cayenne.tools.dbimport.config; + +/** + * @since 3.2. + */ +public class IncludeColumn extends PatternParam { + public IncludeColumn() { + } + + public IncludeColumn(String pattern) { + super(pattern); + } +} http://git-wip-us.apache.org/repos/asf/cayenne/blob/276f049c/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/IncludeProcedure.java ---------------------------------------------------------------------- diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/IncludeProcedure.java b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/IncludeProcedure.java new file mode 100644 index 0000000..a5c8ea2 --- /dev/null +++ b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/IncludeProcedure.java @@ -0,0 +1,31 @@ +/***************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + ****************************************************************/ +package org.apache.cayenne.tools.dbimport.config; + +/** + * @since 3.2. + */ +public class IncludeProcedure extends PatternParam { + public IncludeProcedure() { + } + + public IncludeProcedure(String pattern) { + super(pattern); + } +} http://git-wip-us.apache.org/repos/asf/cayenne/blob/276f049c/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/IncludeTable.java ---------------------------------------------------------------------- diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/IncludeTable.java b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/IncludeTable.java new file mode 100644 index 0000000..e627eea --- /dev/null +++ b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/IncludeTable.java @@ -0,0 +1,77 @@ +/***************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + ****************************************************************/ +package org.apache.cayenne.tools.dbimport.config; + +import java.util.Collection; +import java.util.LinkedList; + +import static org.apache.commons.lang.StringUtils.join; + +/** + * @since 3.2. + */ +public class IncludeTable extends PatternParam { + + private Collection<IncludeColumn> includeColumns = new LinkedList<IncludeColumn>(); + private Collection<ExcludeColumn> excludeColumns = new LinkedList<ExcludeColumn>(); + + public IncludeTable() { + } + + public IncludeTable(String pattern) { + super(pattern); + } + + public Collection<IncludeColumn> getIncludeColumns() { + return includeColumns; + } + + public void setIncludeColumns(Collection<IncludeColumn> includeColumns) { + this.includeColumns = includeColumns; + } + + public Collection<ExcludeColumn> getExcludeColumns() { + return excludeColumns; + } + + public void setExcludeColumns(Collection<ExcludeColumn> excludeColumns) { + this.excludeColumns = excludeColumns; + } + + public void addIncludeColumn(IncludeColumn includeColumn) { + this.includeColumns.add(includeColumn); + } + + public void addExcludeColumn(ExcludeColumn excludeColumn) { + this.excludeColumns.add(excludeColumn); + } + + @Override + public String toString() { + String str = "+(" + getPattern() + ") "; + if (includeColumns != null && !includeColumns.isEmpty()) { + str += "+Columns(" + join(includeColumns, ", ") + ") "; + } + + if (excludeColumns != null && !excludeColumns.isEmpty()) { + str += "-Columns(" + join(excludeColumns, ", ") + ") "; + } + return str; + } +} http://git-wip-us.apache.org/repos/asf/cayenne/blob/276f049c/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/PatternParam.java ---------------------------------------------------------------------- diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/PatternParam.java b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/PatternParam.java new file mode 100644 index 0000000..3d8297c --- /dev/null +++ b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/PatternParam.java @@ -0,0 +1,74 @@ +/***************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + ****************************************************************/ +package org.apache.cayenne.tools.dbimport.config; + +/** + * @since 3.2. + */ +public class PatternParam { + + private String pattern; + + public PatternParam() { + } + + public PatternParam(String pattern) { + this.pattern = pattern; + } + + public String getPattern() { + return pattern; + } + + public void setPattern(String pattern) { + this.pattern = pattern; + } + + /** + * used my maven + * + * @param pattern + */ + public void set(String pattern) { + setPattern(pattern); + } + + + /** + * used my ant + * + * @param pattern + */ + public void addText(String pattern) { + if (pattern.trim().isEmpty()) { + return; + } + + setPattern(pattern); + } + + public void addConfiguredPattern(AntNestedElement pattern) { + set(pattern.getName()); + } + + @Override + public String toString() { + return "RegExp(" + pattern + ")"; + } +} http://git-wip-us.apache.org/repos/asf/cayenne/blob/276f049c/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/ReverseEngineering.java ---------------------------------------------------------------------- diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/ReverseEngineering.java b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/ReverseEngineering.java new file mode 100644 index 0000000..8f4277b --- /dev/null +++ b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/ReverseEngineering.java @@ -0,0 +1,60 @@ +/***************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + ****************************************************************/ +package org.apache.cayenne.tools.dbimport.config; + + +import java.util.Collection; +import java.util.LinkedList; + +/** + * @since 3.2. + */ +public class ReverseEngineering extends FilterContainer { + + private Collection<Catalog> catalogs = new LinkedList<Catalog>(); + private Collection<Schema> schemas = new LinkedList<Schema>(); + + public ReverseEngineering() { + } + + public Collection<Catalog> getCatalogs() { + return catalogs; + } + + public void setCatalogs(Collection<Catalog> catalogs) { + this.catalogs = catalogs; + } + + public Collection<Schema> getSchemas() { + return schemas; + } + + public void setSchemas(Collection<Schema> schemas) { + this.schemas = schemas; + } + + public void addSchema(Schema schema) { + this.schemas.add(schema); + } + + public void addCatalog(Catalog catalog) { + this.catalogs.add(catalog); + } + +} http://git-wip-us.apache.org/repos/asf/cayenne/blob/276f049c/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/ReverseEngineeringLoader.java ---------------------------------------------------------------------- diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/ReverseEngineeringLoader.java b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/ReverseEngineeringLoader.java new file mode 100644 index 0000000..8e663b6 --- /dev/null +++ b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/ReverseEngineeringLoader.java @@ -0,0 +1,31 @@ +/***************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + ****************************************************************/ +package org.apache.cayenne.tools.dbimport.config; + +import org.apache.cayenne.CayenneRuntimeException; +import org.apache.cayenne.resource.Resource; + +/** + * @since 3.2. + */ +public interface ReverseEngineeringLoader { + + ReverseEngineering load(Resource configurationResource) throws CayenneRuntimeException; + +} http://git-wip-us.apache.org/repos/asf/cayenne/blob/276f049c/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/Schema.java ---------------------------------------------------------------------- diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/Schema.java b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/Schema.java new file mode 100644 index 0000000..1a399f0 --- /dev/null +++ b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/Schema.java @@ -0,0 +1,58 @@ +/***************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + ****************************************************************/ +package org.apache.cayenne.tools.dbimport.config; + +/** + * @since 3.2. + */ +public class Schema extends FilterContainer { + + private String name; + + public Schema() { + } + + public Schema(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public void set(String name) { + setName(name); + } + + public void addConfiguredName(AntNestedElement name) { + setName(name.getName()); + } + + public void addText(String name) { + if (name.trim().isEmpty()) { + return; + } + + setName(name); + } +} http://git-wip-us.apache.org/repos/asf/cayenne/blob/276f049c/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/Type.java ---------------------------------------------------------------------- diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/Type.java b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/Type.java new file mode 100644 index 0000000..bbd1039 --- /dev/null +++ b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/Type.java @@ -0,0 +1,136 @@ +/***************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + ****************************************************************/ +package org.apache.cayenne.tools.dbimport.config; + +import org.apache.cayenne.util.ToStringBuilder; + +/** + * @since 3.2. + */ +public class Type { + + private String jdbc; + private String java; + + private Integer length; + private Integer precision; + private Integer scale; + private Boolean notNull; + + public String getJdbc() { + return jdbc; + } + + public void setJdbc(String jdbc) { + this.jdbc = jdbc; + } + + public String getJava() { + return java; + } + + public void setJava(String java) { + this.java = java; + } + + public Integer getLength() { + return length; + } + + public void setLength(Integer length) { + this.length = length; + } + + public Integer getPrecision() { + return precision; + } + + public void setPrecision(Integer precision) { + this.precision = precision; + } + + public Integer getScale() { + return scale; + } + + public void setScale(Integer scale) { + this.scale = scale; + } + + public Boolean getNotNull() { + return notNull; + } + + public void setNotNull(Boolean notNull) { + this.notNull = notNull; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + Type type = (Type) o; + + if (jdbc != null ? !jdbc.equals(type.jdbc) : type.jdbc != null) { + return false; + } + if (!length.equals(type.length)) { + return false; + } + if (!notNull.equals(type.notNull)) { + return false; + } + if (!precision.equals(type.precision)) { + return false; + } + if (!scale.equals(type.scale)) { + return false; + } + + return true; + } + + @Override + public int hashCode() { + int result = jdbc != null ? jdbc.hashCode() : 0; + result = 31 * result + length.hashCode(); + result = 31 * result + precision.hashCode(); + result = 31 * result + scale.hashCode(); + result = 31 * result + notNull.hashCode(); + return result; + } + + + @Override + public String toString() { + return new ToStringBuilder(this) + .append("jdbc", jdbc) + .append("java", java) + .append("length", length) + .append("precision", precision) + .append("scale", scale) + .append("notNull", notNull) + .toString(); + } +} http://git-wip-us.apache.org/repos/asf/cayenne/blob/276f049c/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/TypeMapper.java ---------------------------------------------------------------------- diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/TypeMapper.java b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/TypeMapper.java new file mode 100644 index 0000000..ed84fff --- /dev/null +++ b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/config/TypeMapper.java @@ -0,0 +1,95 @@ +/***************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + ****************************************************************/ +package org.apache.cayenne.tools.dbimport.config; + +import org.apache.cayenne.util.EqualsBuilder; +import org.apache.cayenne.util.HashCodeBuilder; + +import java.util.Collection; +import java.util.LinkedList; + +/** + * @since 3.2. + */ +public class TypeMapper { + + private String mapperClassName; + + private Boolean usePrimitives; + + private Collection<Type> types = new LinkedList<Type>(); + + public String getMapperClassName() { + return mapperClassName; + } + + public void setMapperClassName(String mapperClassName) { + this.mapperClassName = mapperClassName; + } + + public Boolean getUsePrimitives() { + return usePrimitives; + } + + public void setUsePrimitives(Boolean usePrimitives) { + this.usePrimitives = usePrimitives; + } + + public Collection<Type> getTypes() { + return types; + } + + public void setTypes(Collection<Type> types) { + this.types = types; + } + + public void addType(Type type) { + this.types.add(type); + } + + + @Override + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (obj == this) { + return true; + } + if (obj.getClass() != getClass()) { + return false; + } + TypeMapper rhs = (TypeMapper) obj; + return new EqualsBuilder() + .append(this.mapperClassName, rhs.mapperClassName) + .append(this.usePrimitives, rhs.usePrimitives) + .append(this.types, rhs.types) + .isEquals(); + } + + @Override + public int hashCode() { + return new HashCodeBuilder().append(mapperClassName).append(usePrimitives).append(types).toHashCode(); + } + + @Override + public String toString() { + return "TypeMapper {mapperClassName=" + mapperClassName + ", usePrimitives=" + usePrimitives + ", types=" + types + '}'; + } +} http://git-wip-us.apache.org/repos/asf/cayenne/blob/276f049c/cayenne-tools/src/test/java/org/apache/cayenne/tools/DbImporterTaskTest.java ---------------------------------------------------------------------- diff --git a/cayenne-tools/src/test/java/org/apache/cayenne/tools/DbImporterTaskTest.java b/cayenne-tools/src/test/java/org/apache/cayenne/tools/DbImporterTaskTest.java new file mode 100644 index 0000000..647b66d --- /dev/null +++ b/cayenne-tools/src/test/java/org/apache/cayenne/tools/DbImporterTaskTest.java @@ -0,0 +1,168 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.cayenne.tools; + +import org.apache.cayenne.tools.dbimport.DbImportConfiguration; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.ProjectHelper; +import org.apache.tools.ant.UnknownElement; +import org.apache.tools.ant.util.FileUtils; +import org.custommonkey.xmlunit.DetailedDiff; +import org.custommonkey.xmlunit.Diff; +import org.custommonkey.xmlunit.XMLUnit; +import org.junit.Test; +import org.xml.sax.SAXException; + +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.net.URISyntaxException; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; + +import static org.apache.cayenne.tools.dbimport.config.DefaultReverseEngineeringLoaderTest.*; +import static org.apache.commons.lang.StringUtils.isBlank; +import static org.junit.Assert.fail; + +public class DbImporterTaskTest { + + static { + XMLUnit.setIgnoreWhitespace(true); + } + + @Test + public void testLoadCatalog() throws Exception { + assertCatalog(getCdbImport("build-catalog.xml").getReverseEngineering()); + } + + @Test + public void testLoadSchema() throws Exception { + assertSchema(getCdbImport("build-schema.xml").getReverseEngineering()); + } + + @Test + public void testLoadCatalogAndSchema() throws Exception { + assertCatalogAndSchema(getCdbImport("build-catalog-and-schema.xml").getReverseEngineering()); + } + + @Test + public void testLoadFlat() throws Exception { + assertFlat(getCdbImport("build-flat.xml").getReverseEngineering()); + } + + @Test + public void testIncludeTable() throws Exception { + test("build-include-table.xml"); + } + + + private DbImporterTask getCdbImport(String buildFile) { + Project project = new Project(); + ProjectHelper.configureProject(project, new File(getPackagePath() + "/" + buildFile)); + + UnknownElement task = (UnknownElement) project.getTargets().get("dist").getTasks()[0]; + task.maybeConfigure(); + + return (DbImporterTask) task.getRealThing(); + } + + private String getPackagePath() { + return getClass().getClassLoader().getResource(getClass().getPackage().getName().replace('.', '/')).getPath(); + } + + private void test(String name) throws Exception { + DbImporterTask cdbImport = getCdbImport("dbimport/" + name); + File mapFile = cdbImport.getMap(); + File mapFileCopy = new File(mapFile.getParentFile(), "copy-" + mapFile.getName()); + if (mapFile.exists()) { + FileUtils.getFileUtils().copyFile(mapFile, mapFileCopy); + cdbImport.setMap(mapFileCopy); + } else { + mapFileCopy = mapFile; + } + + prepareDatabase(name, cdbImport.toParameters()); + + try { + cdbImport.execute(); + verifyResult(mapFile, mapFileCopy); + } finally { + cleanDb(cdbImport.toParameters()); + } + } + + private void cleanDb(DbImportConfiguration dbImportConfiguration) throws ClassNotFoundException, IllegalAccessException, InstantiationException, SQLException { + Class.forName(dbImportConfiguration.getDriver()).newInstance(); + // Get a connection + Connection connection = DriverManager.getConnection(dbImportConfiguration.getUrl()); + Statement stmt = connection.createStatement(); + + ResultSet tables = connection.getMetaData().getTables(null, null, null, new String[]{"TABLE"}); + while (tables.next()) { + String schema = tables.getString("TABLE_SCHEM"); + System.out.println("DROP TABLE " + (isBlank(schema) ? "" : schema + ".") + tables.getString("TABLE_NAME")); + stmt.execute("DROP TABLE " + (isBlank(schema) ? "" : schema + ".") + tables.getString("TABLE_NAME")); + } + + ResultSet schemas = connection.getMetaData().getSchemas(); + while (schemas.next()) { + String schem = schemas.getString("TABLE_SCHEM"); + if (schem.startsWith("SCHEMA")) { + System.out.println("DROP SCHEMA " + schem); + stmt.execute("DROP SCHEMA " + schem + " RESTRICT"); + } + } + } + + private void verifyResult(File map, File mapFileCopy) { + try { + FileReader control = new FileReader(map.getAbsolutePath() + "-result"); + FileReader test = new FileReader(mapFileCopy); + + DetailedDiff diff = new DetailedDiff(new Diff(control, test)); + if (!diff.similar()) { + System.out.println(" >>>> " + map.getAbsolutePath() + "-result"); + System.out.println(" >>>> " + mapFileCopy); + fail(diff.toString()); + } + + } catch (SAXException e) { + e.printStackTrace(); + fail(); + } catch (IOException e) { + e.printStackTrace(); + fail(); + } + } + + private void prepareDatabase(String sqlFile, DbImportConfiguration dbImportConfiguration) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException, IOException, URISyntaxException { + Class.forName(dbImportConfiguration.getDriver()).newInstance(); + // Get a connection + Statement stmt = DriverManager.getConnection(dbImportConfiguration.getUrl()).createStatement(); + + for (String sql : FileUtils.readFully(new FileReader(getPackagePath() + "/dbimport/" + sqlFile + ".sql")).split(";")) { + stmt.execute(sql); + } + } + +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cayenne/blob/276f049c/cayenne-tools/src/test/java/org/apache/cayenne/tools/NamePatternMatcherTest.java ---------------------------------------------------------------------- diff --git a/cayenne-tools/src/test/java/org/apache/cayenne/tools/NamePatternMatcherTest.java b/cayenne-tools/src/test/java/org/apache/cayenne/tools/NamePatternMatcherTest.java index 67fe11c..14183dc 100644 --- a/cayenne-tools/src/test/java/org/apache/cayenne/tools/NamePatternMatcherTest.java +++ b/cayenne-tools/src/test/java/org/apache/cayenne/tools/NamePatternMatcherTest.java @@ -19,11 +19,14 @@ package org.apache.cayenne.tools; +import org.apache.cayenne.access.loader.NamePatternMatcher; import org.apache.tools.ant.Task; import org.junit.Test; import static org.junit.Assert.assertEquals; +import static org.apache.cayenne.access.loader.NamePatternMatcher.replaceWildcardInStringWithString; + public class NamePatternMatcherTest { /** @@ -31,32 +34,14 @@ public class NamePatternMatcherTest { */ @Test public void testReplaceWildcardInStringWithString() throws Exception { - assertEquals(null, NamePatternMatcher.replaceWildcardInStringWithString( - "*", - null, - "Entity")); - assertEquals("*.java", NamePatternMatcher.replaceWildcardInStringWithString( - null, - "*.java", - "Entity")); - assertEquals("Entity.java", NamePatternMatcher.replaceWildcardInStringWithString( - "*", - "*.java", - "Entity")); - assertEquals("java.Entity", NamePatternMatcher.replaceWildcardInStringWithString( - "*", - "java.*", - "Entity")); - assertEquals("Entity.Entity", NamePatternMatcher - .replaceWildcardInStringWithString("*", "*.*", "Entity")); - assertEquals("EntityEntity", NamePatternMatcher - .replaceWildcardInStringWithString("*", "**", "Entity")); - assertEquals("EditEntityReport.vm", NamePatternMatcher - .replaceWildcardInStringWithString("*", "Edit*Report.vm", "Entity")); - assertEquals("Entity", NamePatternMatcher.replaceWildcardInStringWithString( - "*", - "*", - "Entity")); + assertEquals(null, replaceWildcardInStringWithString("*", null, "Entity")); + assertEquals("*.java", replaceWildcardInStringWithString(null, "*.java", "Entity")); + assertEquals("Entity.java", replaceWildcardInStringWithString("*", "*.java", "Entity")); + assertEquals("java.Entity", replaceWildcardInStringWithString("*", "java.*", "Entity")); + assertEquals("Entity.Entity", replaceWildcardInStringWithString("*", "*.*", "Entity")); + assertEquals("EntityEntity", replaceWildcardInStringWithString("*", "**", "Entity")); + assertEquals("EditEntityReport.vm", replaceWildcardInStringWithString("*", "Edit*Report.vm", "Entity")); + assertEquals("Entity", replaceWildcardInStringWithString("*", "*", "Entity")); } /** @@ -74,10 +59,8 @@ public class NamePatternMatcherTest { String includePattern = "billing_*,user?"; String excludePattern = null; - NamePatternMatcher namePatternMatcher = new NamePatternMatcher( - new AntLogger(parentTask), - includePattern, - excludePattern); + NamePatternMatcher namePatternMatcher = NamePatternMatcher.build( + new AntLogger(parentTask), includePattern, excludePattern); String[] nullFilters = namePatternMatcher.tokenizePattern(null); assertEquals(0, nullFilters.length); @@ -103,10 +86,8 @@ public class NamePatternMatcherTest { String includePattern = "Organization,SecGroup,SecIndividual"; String excludePattern = null; - NamePatternMatcher namePatternMatcher = new NamePatternMatcher( - new AntLogger(parentTask), - includePattern, - excludePattern); + NamePatternMatcher namePatternMatcher = NamePatternMatcher.build( + new AntLogger(parentTask), includePattern, excludePattern); String[] filters = namePatternMatcher.tokenizePattern(includePattern); assertEquals(3, filters.length); http://git-wip-us.apache.org/repos/asf/cayenne/blob/276f049c/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DbImportActionTest.java ---------------------------------------------------------------------- diff --git a/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DbImportActionTest.java b/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DbImportActionTest.java index 2977576..72d1df4 100644 --- a/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DbImportActionTest.java +++ b/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DbImportActionTest.java @@ -1,25 +1,26 @@ -/***************************************************************** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - ****************************************************************/ + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ package org.apache.cayenne.tools.dbimport; import org.apache.cayenne.CayenneRuntimeException; import org.apache.cayenne.access.DbLoader; +import org.apache.cayenne.access.loader.DbLoaderConfiguration; import org.apache.cayenne.access.DbLoaderDelegate; import org.apache.cayenne.configuration.DataNodeDescriptor; import org.apache.cayenne.configuration.server.DataSourceFactory; @@ -69,16 +70,10 @@ public class DbImportActionTest { @Test public void testNewDataMapImport() throws Exception { - final boolean[] haveWeTriedToLoadProcedures = {false}; DbLoader dbLoader = new DbLoader(null, null, null) { @Override - public void load(DataMap dataMap, String catalogPattern, String schemaPattern, String tablePattern, String... tableTypes) throws SQLException { - new DataMapBuilder(dataMap).withDbEntities(2); - } - - @Override - public void loadProcedures(DataMap dataMap, String catalogPattern, String schemaPattern, String namePattern) throws SQLException { - haveWeTriedToLoadProcedures[0] = true; + public DataMap load(DbLoaderConfiguration config) throws SQLException { + return new DataMapBuilder(new DataMap()).withDbEntities(2).build(); } @Override @@ -93,7 +88,10 @@ public class DbImportActionTest { when(params.createDataMap()).thenReturn(new DataMap("testImport")); when(params.createMergeDelegate()).thenReturn(new DefaultModelMergeDelegate()); - when(params.isImportProcedures()).thenReturn(true); + when(params.getDbLoaderConfig()).thenReturn(new DbLoaderConfiguration()); + + final DataMap DATA_MAP = new DataMap(); + when(params.initializeDataMap(any(DataMap.class))).thenReturn(DATA_MAP); final boolean[] haveWeTriedToSave = {false}; DbImportAction action = buildDbImportAction(new FileProjectSaver() { @@ -102,14 +100,12 @@ public class DbImportActionTest { haveWeTriedToSave[0] = true; // Validation phase - DataMap rootNode = (DataMap) project.getRootNode(); - assertEquals(2, rootNode.getDbEntityMap().size()); + assertEquals(DATA_MAP, project.getRootNode()); } }, null); action.execute(params); - assertTrue("We should try to load procedures.", haveWeTriedToLoadProcedures[0]); assertTrue("We should try to save.", haveWeTriedToSave[0]); } @@ -117,7 +113,8 @@ public class DbImportActionTest { public void testImportWithFieldChanged() throws Exception { DbLoader dbLoader = new DbLoader(null, null, null) { @Override - public void load(DataMap dataMap, String catalogPattern, String schemaPattern, String tablePattern, String... tableTypes) throws SQLException { + public DataMap load(DbLoaderConfiguration config) throws SQLException { + DataMap dataMap = new DataMap("dataMap"); new DataMapBuilder(dataMap).with( dbEntity("ARTGROUP").attributes( dbAttr("GROUP_ID").typeInt().primaryKey(), @@ -128,6 +125,8 @@ public class DbImportActionTest { objEntity("org.apache.cayenne.testdo.testmap", "ArtGroup", "ARTGROUP").attributes( objAttr("name").type(String.class).dbPath("NAME") )); + + return dataMap; } @Override @@ -143,6 +142,7 @@ public class DbImportActionTest { when(params.createDataMap()).thenReturn(new DataMap("testImport")); when(params.getDataMapFile()).thenReturn(FILE_STUB); when(params.createMergeDelegate()).thenReturn(new DefaultModelMergeDelegate()); + when(params.getDbLoaderConfig()).thenReturn(new DbLoaderConfiguration()); final boolean[] haveWeTriedToSave = {false}; DbImportAction action = buildDbImportAction(new FileProjectSaver() { @@ -185,11 +185,13 @@ public class DbImportActionTest { public void testImportWithoutChanges() throws Exception { DbLoader dbLoader = new DbLoader(null, null, null) { @Override - public void load(DataMap dataMap, String catalogPattern, String schemaPattern, String tablePattern, String... tableTypes) throws SQLException { + public DataMap load(DbLoaderConfiguration config) throws SQLException { + DataMap dataMap = new DataMap("dataMap"); new DataMapBuilder(dataMap).with( dbEntity("ARTGROUP").attributes( dbAttr("NAME").typeVarchar(100).mandatory() )); + return dataMap; } @Override @@ -205,6 +207,7 @@ public class DbImportActionTest { when(params.createDataMap()).thenReturn(new DataMap("testImport")); when(params.getDataMapFile()).thenReturn(FILE_STUB); when(params.createMergeDelegate()).thenReturn(new DefaultModelMergeDelegate()); + when(params.getDbLoaderConfig()).thenReturn(new DbLoaderConfiguration()); Log log = mock(Log.class); when(log.isDebugEnabled()).thenReturn(false); @@ -231,7 +234,7 @@ public class DbImportActionTest { public void testImportWithDbError() throws Exception { DbLoader dbLoader = mock(DbLoader.class); when(dbLoader.getDefaultTableTypes()).thenReturn(null); - doThrow(new SQLException()).when(dbLoader).load(any(DataMap.class), anyString(), anyString(), anyString()); + doThrow(new SQLException()).when(dbLoader).load(any(DataMap.class), any(DbLoaderConfiguration.class)); DbImportConfiguration params = mock(DbImportConfiguration.class); when(params.createLoader(any(DbAdapter.class), any(Connection.class), any(DbLoaderDelegate.class))) http://git-wip-us.apache.org/repos/asf/cayenne/blob/276f049c/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DbImportConfigurationTest.java ---------------------------------------------------------------------- diff --git a/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DbImportConfigurationTest.java b/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DbImportConfigurationTest.java index 18aeeb4..e8f03d0 100644 --- a/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DbImportConfigurationTest.java +++ b/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/DbImportConfigurationTest.java @@ -18,214 +18,21 @@ ****************************************************************/ package org.apache.cayenne.tools.dbimport; -import org.apache.cayenne.access.DbLoader; -import org.apache.cayenne.access.DbLoaderDelegate; -import org.apache.cayenne.dba.DbAdapter; import org.apache.cayenne.map.DataMap; -import org.apache.cayenne.map.DbAttribute; import org.apache.cayenne.map.DbEntity; -import org.apache.cayenne.map.ObjAttribute; -import org.apache.cayenne.map.ObjEntity; import org.apache.cayenne.util.XMLEncoder; import org.junit.Test; import java.io.File; import java.io.PrintWriter; -import java.lang.reflect.Field; import java.net.MalformedURLException; import java.net.URL; -import java.sql.Connection; -import java.sql.Types; -import java.util.List; import static org.junit.Assert.*; -import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.mock; public class DbImportConfigurationTest { @Test - public void testCreateLoader() throws Exception { - DbImportConfiguration parameters = new DbImportConfiguration(); - - Connection connection = mock(Connection.class); - - DbLoader loader = parameters.createLoader(mock(DbAdapter.class), connection, - mock(DbLoaderDelegate.class)); - assertNotNull(loader); - assertSame(connection, loader.getConnection()); - assertTrue(loader.includeTableName("dummy")); - } - - @Test - public void testCreateLoader_IncludeExclude() throws Exception { - DbImportConfiguration parameters = new DbImportConfiguration(); - parameters.setIncludeTables("a,b,c*"); - - DbLoader loader1 = parameters.createLoader(mock(DbAdapter.class), mock(Connection.class), - mock(DbLoaderDelegate.class)); - - assertFalse(loader1.includeTableName("dummy")); - assertFalse(loader1.includeTableName("ab")); - assertTrue(loader1.includeTableName("a")); - assertTrue(loader1.includeTableName("b")); - assertTrue(loader1.includeTableName("cd")); - - parameters.setExcludeTables("cd"); - - DbLoader loader2 = parameters.createLoader(mock(DbAdapter.class), mock(Connection.class), - mock(DbLoaderDelegate.class)); - - assertFalse(loader2.includeTableName("dummy")); - assertFalse(loader2.includeTableName("ab")); - assertTrue(loader2.includeTableName("a")); - assertTrue(loader2.includeTableName("b")); - assertFalse(loader2.includeTableName("cd")); - assertTrue(loader2.includeTableName("cx")); - } - - - @Test - public void testCreateLoader_MeaningfulPk_Default() throws Exception { - DbImportConfiguration parameters = new DbImportConfiguration(); - assertNull(parameters.getMeaningfulPkTables()); - - DbLoader loader1 = parameters.createLoader(mock(DbAdapter.class), mock(Connection.class), - mock(DbLoaderDelegate.class)); - - DataMap map = new DataMap(); - - DbEntity e1 = new DbEntity("e1"); - DbAttribute pk = new DbAttribute("pk", Types.INTEGER, e1); - pk.setPrimaryKey(true); - e1.addAttribute(pk); - DbAttribute nonPk = new DbAttribute("nonPk", Types.INTEGER, e1); - e1.addAttribute(nonPk); - - map.addDbEntity(e1); - - // DbLoader is so ugly and hard to test.. - Field dbEntityList = DbLoader.class.getDeclaredField("dbEntityList"); - dbEntityList.setAccessible(true); - List<DbEntity> entities = (List<DbEntity>) dbEntityList.get(loader1); - entities.add(e1); - - loader1.loadObjEntities(map); - - ObjEntity oe1 = map.getObjEntity("E1"); - assertEquals(1, oe1.getAttributes().size()); - assertNotNull(oe1.getAttribute("nonPk")); - } - - @Test - public void testCreateLoader_MeaningfulPk_Specified() throws Exception { - DbImportConfiguration parameters = new DbImportConfiguration(); - parameters.setMeaningfulPkTables("a*"); - - DbLoader loader1 = parameters.createLoader(mock(DbAdapter.class), mock(Connection.class), - mock(DbLoaderDelegate.class)); - - // DbLoader is so ugly and hard to test.. - Field dbEntityList = DbLoader.class.getDeclaredField("dbEntityList"); - dbEntityList.setAccessible(true); - List<DbEntity> entities = (List<DbEntity>) dbEntityList.get(loader1); - - DataMap map = new DataMap(); - - DbEntity e1 = new DbEntity("e1"); - DbAttribute pk = new DbAttribute("pk", Types.INTEGER, e1); - pk.setPrimaryKey(true); - e1.addAttribute(pk); - DbAttribute nonPk = new DbAttribute("nonPk", Types.INTEGER, e1); - e1.addAttribute(nonPk); - - map.addDbEntity(e1); - entities.add(e1); - - DbEntity a1 = new DbEntity("a1"); - DbAttribute apk = new DbAttribute("pk", Types.INTEGER, a1); - apk.setPrimaryKey(true); - a1.addAttribute(apk); - DbAttribute anonPk = new DbAttribute("nonPk", Types.INTEGER, a1); - a1.addAttribute(anonPk); - - map.addDbEntity(a1); - entities.add(a1); - - loader1.loadObjEntities(map); - - ObjEntity oe1 = map.getObjEntity("E1"); - assertEquals(1, oe1.getAttributes().size()); - assertNotNull(oe1.getAttribute("nonPk")); - - ObjEntity oe2 = map.getObjEntity("A1"); - assertEquals(2, oe2.getAttributes().size()); - assertNotNull(oe2.getAttribute("nonPk")); - assertNotNull(oe2.getAttribute("pk")); - } - - @Test - public void testCreateLoader_UsePrimitives_False() throws Exception { - DbImportConfiguration parameters = new DbImportConfiguration(); - parameters.setUsePrimitives(false); - - DbLoader loader1 = parameters.createLoader(mock(DbAdapter.class), mock(Connection.class), - mock(DbLoaderDelegate.class)); - - DataMap map = new DataMap(); - - DbEntity e1 = new DbEntity("e1"); - DbAttribute nonPk = new DbAttribute("nonPk", Types.INTEGER, e1); - e1.addAttribute(nonPk); - - map.addDbEntity(e1); - - // DbLoader is so ugly and hard to test.. - Field dbEntityList = DbLoader.class.getDeclaredField("dbEntityList"); - dbEntityList.setAccessible(true); - List<DbEntity> entities = (List<DbEntity>) dbEntityList.get(loader1); - entities.add(e1); - - loader1.loadObjEntities(map); - - ObjEntity oe1 = map.getObjEntity("E1"); - - ObjAttribute oa1 = oe1.getAttribute("nonPk"); - assertEquals("java.lang.Integer", oa1.getType()); - } - - @Test - public void testCreateLoader_UsePrimitives_True() throws Exception { - DbImportConfiguration parameters = new DbImportConfiguration(); - parameters.setUsePrimitives(true); - - DbLoader loader1 = parameters.createLoader(mock(DbAdapter.class), mock(Connection.class), - mock(DbLoaderDelegate.class)); - - DataMap map = new DataMap(); - - DbEntity e1 = new DbEntity("e1"); - DbAttribute nonPk = new DbAttribute("nonPk", Types.INTEGER, e1); - e1.addAttribute(nonPk); - - map.addDbEntity(e1); - - // DbLoader is so ugly and hard to test.. - Field dbEntityList = DbLoader.class.getDeclaredField("dbEntityList"); - dbEntityList.setAccessible(true); - List<DbEntity> entities = (List<DbEntity>) dbEntityList.get(loader1); - entities.add(e1); - - loader1.loadObjEntities(map); - - ObjEntity oe1 = map.getObjEntity("E1"); - - ObjAttribute oa1 = oe1.getAttribute("nonPk"); - assertEquals("int", oa1.getType()); - } - - - @Test public void testCreateDataMap_New() throws Exception { URL outUrl = dataMapUrl("testCreateDataMap1.map.xml"); http://git-wip-us.apache.org/repos/asf/cayenne/blob/276f049c/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/config/DefaultReverseEngineeringLoaderTest.java ---------------------------------------------------------------------- diff --git a/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/config/DefaultReverseEngineeringLoaderTest.java b/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/config/DefaultReverseEngineeringLoaderTest.java new file mode 100644 index 0000000..16c9735 --- /dev/null +++ b/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/config/DefaultReverseEngineeringLoaderTest.java @@ -0,0 +1,203 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.cayenne.tools.dbimport.config; + +import org.apache.cayenne.resource.URLResource; +import org.junit.Test; + +import java.io.File; +import java.net.MalformedURLException; +import java.util.Iterator; + +import static org.junit.Assert.assertEquals; + +public class DefaultReverseEngineeringLoaderTest { + + @Test + public void testLoadCatalog() throws Exception { + ReverseEngineering engineering = new DefaultReverseEngineeringLoader() + .load(getResource("/reverseEngineering-catalog.xml")); + + assertCatalog(engineering); + } + + public static void assertCatalog(ReverseEngineering engineering) { + Iterator<Catalog> catalogs = engineering.getCatalogs().iterator(); + assertEquals("catalog-name-01", catalogs.next().getName()); + assertEquals("catalog-name-02", catalogs.next().getName()); + + Catalog catalog = catalogs.next(); + assertEquals("catalog-name-03", catalog.getName()); + + Iterator<IncludeTable> includeTables = catalog.getIncludeTables().iterator(); + assertEquals("includeTable-01", includeTables.next().getPattern()); + assertEquals("includeTable-02", includeTables.next().getPattern()); + + IncludeTable includeTable = includeTables.next(); + assertEquals("includeTable-03", includeTable.getPattern()); + assertEquals("includeColumn-01", includeTable.getIncludeColumns().iterator().next().getPattern()); + assertEquals("excludeColumn-01", includeTable.getExcludeColumns().iterator().next().getPattern()); + + Iterator<ExcludeTable> excludeTables = catalog.getExcludeTables().iterator(); + assertEquals("excludeTable-01", excludeTables.next().getPattern()); + assertEquals("excludeTable-02", excludeTables.next().getPattern()); + assertEquals("excludeTable-03", excludeTables.next().getPattern()); + + Iterator<ExcludeColumn> excludeColumns = catalog.getExcludeColumns().iterator(); + assertEquals("excludeColumn-01", excludeColumns.next().getPattern()); + assertEquals("excludeColumn-02", excludeColumns.next().getPattern()); + assertEquals("excludeColumn-03", excludeColumns.next().getPattern()); + Iterator<IncludeColumn> includeColumns = catalog.getIncludeColumns().iterator(); + assertEquals("includeColumn-01", includeColumns.next().getPattern()); + assertEquals("includeColumn-02", includeColumns.next().getPattern()); + assertEquals("includeColumn-03", includeColumns.next().getPattern()); + + Iterator<ExcludeProcedure> excludeProcedures = catalog.getExcludeProcedures().iterator(); + assertEquals("excludeProcedure-01", excludeProcedures.next().getPattern()); + assertEquals("excludeProcedure-02", excludeProcedures.next().getPattern()); + assertEquals("excludeProcedure-03", excludeProcedures.next().getPattern()); + Iterator<IncludeProcedure> includeProcedures = catalog.getIncludeProcedures().iterator(); + assertEquals("includeProcedure-01", includeProcedures.next().getPattern()); + assertEquals("includeProcedure-02", includeProcedures.next().getPattern()); + assertEquals("includeProcedure-03", includeProcedures.next().getPattern()); + } + + @Test + public void testLoadSchema() throws Exception { + ReverseEngineering engineering = new DefaultReverseEngineeringLoader() + .load(getResource("/reverseEngineering-schema.xml")); + + assertSchema(engineering); + } + + public static void assertSchema(ReverseEngineering engineering) { + Iterator<Schema> schemas = engineering.getSchemas().iterator(); + assertEquals("schema-name-01", schemas.next().getName()); + assertEquals("schema-name-02", schemas.next().getName()); + + Schema schema = schemas.next(); + assertEquals("schema-name-03", schema.getName()); + + assertSchemaContent(schema); + } + + public static void assertSchemaContent(Schema schema) { + Iterator<IncludeTable> includeTables = schema.getIncludeTables().iterator(); + assertEquals("includeTable-01", includeTables.next().getPattern()); + assertEquals("includeTable-02", includeTables.next().getPattern()); + + IncludeTable includeTable = includeTables.next(); + assertEquals("includeTable-03", includeTable.getPattern()); + assertEquals("includeColumn-01", includeTable.getIncludeColumns().iterator().next().getPattern()); + assertEquals("excludeColumn-01", includeTable.getExcludeColumns().iterator().next().getPattern()); + + Iterator<ExcludeTable> excludeTables = schema.getExcludeTables().iterator(); + assertEquals("excludeTable-01", excludeTables.next().getPattern()); + assertEquals("excludeTable-02", excludeTables.next().getPattern()); + assertEquals("excludeTable-03", excludeTables.next().getPattern()); + + Iterator<ExcludeColumn> excludeColumns = schema.getExcludeColumns().iterator(); + assertEquals("excludeColumn-01", excludeColumns.next().getPattern()); + assertEquals("excludeColumn-02", excludeColumns.next().getPattern()); + assertEquals("excludeColumn-03", excludeColumns.next().getPattern()); + Iterator<IncludeColumn> includeColumns = schema.getIncludeColumns().iterator(); + assertEquals("includeColumn-01", includeColumns.next().getPattern()); + assertEquals("includeColumn-02", includeColumns.next().getPattern()); + assertEquals("includeColumn-03", includeColumns.next().getPattern()); + + Iterator<ExcludeProcedure> excludeProcedures = schema.getExcludeProcedures().iterator(); + assertEquals("excludeProcedure-01", excludeProcedures.next().getPattern()); + assertEquals("excludeProcedure-02", excludeProcedures.next().getPattern()); + assertEquals("excludeProcedure-03", excludeProcedures.next().getPattern()); + Iterator<IncludeProcedure> includeProcedures = schema.getIncludeProcedures().iterator(); + assertEquals("includeProcedure-01", includeProcedures.next().getPattern()); + assertEquals("includeProcedure-02", includeProcedures.next().getPattern()); + assertEquals("includeProcedure-03", includeProcedures.next().getPattern()); + } + + @Test + public void testLoadCatalogAndSchema() throws Exception { + ReverseEngineering engineering = new DefaultReverseEngineeringLoader() + .load(getResource("/reverseEngineering-catalog-and-schema.xml")); + + assertCatalogAndSchema(engineering); + } + + public static void assertCatalogAndSchema(ReverseEngineering engineering) { + Catalog catalog = engineering.getCatalogs().iterator().next(); + assertEquals("catalog-name", catalog.getName()); + + Schema schema = catalog.getSchemas().iterator().next(); + assertEquals("schema-name", schema.getName()); + + assertSchemaContent(schema); + } + + @Test + public void testLoadFlat() throws Exception { + ReverseEngineering engineering = new DefaultReverseEngineeringLoader() + .load(getResource("/reverseEngineering-flat.xml")); + + assertFlat(engineering); + } + + public static void assertFlat(ReverseEngineering engineering) { + Iterator<IncludeTable> includeTables = engineering.getIncludeTables().iterator(); + assertEquals("includeTable-01", includeTables.next().getPattern()); + assertEquals("includeTable-02", includeTables.next().getPattern()); + + IncludeTable includeTable = includeTables.next(); + assertEquals("includeTable-03", includeTable.getPattern()); + assertEquals("includeColumn-01", includeTable.getIncludeColumns().iterator().next().getPattern()); + assertEquals("excludeColumn-01", includeTable.getExcludeColumns().iterator().next().getPattern()); + + Iterator<ExcludeTable> excludeTables = engineering.getExcludeTables().iterator(); + assertEquals("excludeTable-01", excludeTables.next().getPattern()); + assertEquals("excludeTable-02", excludeTables.next().getPattern()); + assertEquals("excludeTable-03", excludeTables.next().getPattern()); + + Iterator<ExcludeColumn> excludeColumns = engineering.getExcludeColumns().iterator(); + assertEquals("excludeColumn-01", excludeColumns.next().getPattern()); + assertEquals("excludeColumn-02", excludeColumns.next().getPattern()); + assertEquals("excludeColumn-03", excludeColumns.next().getPattern()); + Iterator<IncludeColumn> includeColumns = engineering.getIncludeColumns().iterator(); + assertEquals("includeColumn-01", includeColumns.next().getPattern()); + assertEquals("includeColumn-02", includeColumns.next().getPattern()); + assertEquals("includeColumn-03", includeColumns.next().getPattern()); + + Iterator<ExcludeProcedure> excludeProcedures = engineering.getExcludeProcedures().iterator(); + assertEquals("excludeProcedure-01", excludeProcedures.next().getPattern()); + assertEquals("excludeProcedure-02", excludeProcedures.next().getPattern()); + assertEquals("excludeProcedure-03", excludeProcedures.next().getPattern()); + Iterator<IncludeProcedure> includeProcedures = engineering.getIncludeProcedures().iterator(); + assertEquals("includeProcedure-01", includeProcedures.next().getPattern()); + assertEquals("includeProcedure-02", includeProcedures.next().getPattern()); + assertEquals("includeProcedure-03", includeProcedures.next().getPattern()); + } + + protected URLResource getResource(String file) throws MalformedURLException { + return new URLResource(new File(getPackagePath() + file).toURI().toURL()); + } + + private String getPackagePath() { + return getClass().getClassLoader().getResource(getClass().getPackage().getName().replace('.', '/')).getPath(); + } + +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cayenne/blob/276f049c/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/config/FiltersConfigBuilderTest.java ---------------------------------------------------------------------- diff --git a/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/config/FiltersConfigBuilderTest.java b/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/config/FiltersConfigBuilderTest.java new file mode 100644 index 0000000..54fb4c0 --- /dev/null +++ b/cayenne-tools/src/test/java/org/apache/cayenne/tools/dbimport/config/FiltersConfigBuilderTest.java @@ -0,0 +1,153 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.cayenne.tools.dbimport.config; + +import org.apache.cayenne.access.loader.filters.DbPath; +import org.apache.cayenne.access.loader.filters.EntityFilters; +import org.apache.cayenne.access.loader.filters.FiltersConfig; +import org.junit.Test; + +import static org.apache.cayenne.access.loader.filters.FilterFactory.*; +import static org.apache.cayenne.access.loader.filters.FiltersFactory.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; + +public class FiltersConfigBuilderTest { + + @Test + public void testEmptyDbEntitiesFilters() throws Exception { + ReverseEngineering engineering = new ReverseEngineering(); + FiltersConfig executions = new FiltersConfigBuilder(engineering).filtersConfig(); + + assertEquals("If nothing was configured we have to import everything. Filter %/%/% true/true/true", + new FiltersConfig(eFilters(path(), TRUE, TRUE, NULL)), + executions); + } + + @Test + public void testOnlyOneCatalogDbEntitiesFilters() throws Exception { + ReverseEngineering engineering = new ReverseEngineering(); + engineering.addCatalog(new Catalog("catalog_01")); + FiltersConfig executions = new FiltersConfigBuilder(engineering).filtersConfig(); + + + assertEquals(new FiltersConfig(eFilters(path("catalog_01", null), TRUE, TRUE, NULL)), + executions); + } + + @Test + public void testCatalogDbEntitiesFilters() throws Exception { + ReverseEngineering engineering = new ReverseEngineering(); + engineering.addCatalog(new Catalog("catalog_01")); + engineering.addCatalog(new Catalog("catalog_02").schema(new Schema("schema_01"))); + engineering.addCatalog(new Catalog("catalog_02").schema(new Schema("schema_02"))); + engineering.addCatalog(new Catalog("catalog_02").schema(new Schema("schema_03"))); + engineering.addCatalog(new Catalog("catalog_03").schema(new Schema("schema_01"))); + engineering.addCatalog(new Catalog("catalog_03").schema(new Schema("schema_01"))); + engineering.addCatalog(new Catalog("catalog_03").schema(new Schema("schema_01"))); + engineering.addCatalog(new Catalog("catalog_03").schema(new Schema("schema_01"))); + FiltersConfig executions = new FiltersConfigBuilder(engineering).filtersConfig(); + + + assertEquals(new FiltersConfig( + eFilters(path("catalog_01", null), TRUE, TRUE, NULL), + eFilters(path("catalog_02", "schema_01"), TRUE, TRUE, NULL), + eFilters(path("catalog_02", "schema_02"), TRUE, TRUE, NULL), + eFilters(path("catalog_02", "schema_03"), TRUE, TRUE, NULL), + eFilters(path("catalog_03", "schema_01"), TRUE, TRUE, NULL) + ), + executions); + } + + @Test + public void testSchemaDbEntitiesFilters() throws Exception { + ReverseEngineering engineering = new ReverseEngineering(); + engineering.addSchema(new Schema("schema_01")); + engineering.addSchema(new Schema("schema_02")); + engineering.addSchema(new Schema("schema_03")); + FiltersConfig executions = new FiltersConfigBuilder(engineering).filtersConfig(); + + + assertEquals(new FiltersConfig( + eFilters(path(null, "schema_01"), TRUE, TRUE, NULL), + eFilters(path(null, "schema_02"), TRUE, TRUE, NULL), + eFilters(path(null, "schema_03"), TRUE, TRUE, NULL) + ), + executions); + } + + @Test + public void testFiltersDbEntitiesFilters() throws Exception { + ReverseEngineering engineering = new ReverseEngineering(); + engineering.addIncludeTable(new IncludeTable("IncludeTable")); + engineering.addIncludeColumn(new IncludeColumn("IncludeColumn")); + engineering.addIncludeProcedure(new IncludeProcedure("IncludeProcedure")); + engineering.addExcludeTable(new ExcludeTable("ExcludeTable")); + engineering.addExcludeColumn(new ExcludeColumn("ExcludeColumn")); + engineering.addExcludeProcedure(new ExcludeProcedure("ExcludeProcedure")); + + FiltersConfig executions = new FiltersConfigBuilder(engineering).filtersConfig(); + + assertEquals(new FiltersConfig( + eFilters(path(), + list(include("IncludeTable"), exclude("ExcludeTable")), + list(include("IncludeColumn"), exclude("ExcludeColumn")), + list(include("IncludeProcedure"), exclude("ExcludeProcedure"))), + eFilters(path(null, null, "IncludeTable"), NULL, TRUE, NULL) + ), + executions); + } + + @Test + public void testComplexConfiguration() throws Exception { + IncludeTable table = new IncludeTable("table"); + table.addIncludeColumn(new IncludeColumn("column")); + + Schema schema = new Schema("schema"); + schema.addIncludeTable(table); + + Catalog catalog = new Catalog("catalog"); + catalog.addSchema(schema); + + ReverseEngineering engineering = new ReverseEngineering(); + engineering.addCatalog(catalog); + + FiltersConfig executions = new FiltersConfigBuilder(engineering).filtersConfig(); + + assertEquals(new FiltersConfig( + eFilters(path("catalog", "schema"), include("table"), NULL, NULL), + eFilters(path("catalog", "schema", "table"), NULL, include("column"), NULL) + ), + executions); + } + + @Test + public void testAddNull() throws Exception { + FiltersConfigBuilder builder = new FiltersConfigBuilder(new ReverseEngineering()); + DbPath path = new DbPath(); + builder.add(new EntityFilters(path, NULL, NULL, NULL)); + builder.add(new EntityFilters(path, NULL, NULL, NULL)); + builder.add(new EntityFilters(path, NULL, NULL, NULL)); + builder.add(new EntityFilters(path, NULL, NULL, NULL)); + + EntityFilters filter = builder.filtersConfig().filter(path); + assertFalse(filter.isEmpty()); + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cayenne/blob/276f049c/cayenne-tools/src/test/resources/org/apache/cayenne/tools/build-catalog-and-schema.xml ---------------------------------------------------------------------- diff --git a/cayenne-tools/src/test/resources/org/apache/cayenne/tools/build-catalog-and-schema.xml b/cayenne-tools/src/test/resources/org/apache/cayenne/tools/build-catalog-and-schema.xml new file mode 100644 index 0000000..64ee1bc --- /dev/null +++ b/cayenne-tools/src/test/resources/org/apache/cayenne/tools/build-catalog-and-schema.xml @@ -0,0 +1,78 @@ +<!-- + ~ Licensed to the Apache Software Foundation (ASF) under one + ~ or more contributor license agreements. See the NOTICE file + ~ distributed with this work for additional information + ~ regarding copyright ownership. The ASF licenses this file + ~ to you under the Apache License, Version 2.0 (the + ~ "License"); you may not use this file except in compliance + ~ with the License. You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, + ~ software distributed under the License is distributed on an + ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + ~ KIND, either express or implied. See the License for the + ~ specific language governing permissions and limitations + ~ under the License. + --> + +<project name="MyProject" default="dist" basedir="."> + + <taskdef name="cdbimport" classname="org.apache.cayenne.tools.DbImporterTask" taskname="cdbimport" + classpath="${basedir}" /> + + <target name="dist"> + <cdbimport map="${context.dir}/WEB-INF/DefaultMap.map.xml" + adapter="org.apache.cayenne.dba.hsqldb.HSQLDBAdapter" + driver="org.hsqldb.jdbcDriver" + url="jdbc:hsqldb:hsql://localhost/bookmarker" + username="sa"> + + <catalog name="catalog-name"> + <schema name="schema-name"> + <includeTable>includeTable-01</includeTable> + + <includeTable> + <pattern>includeTable-02</pattern> + </includeTable> + + <includeTable pattern="includeTable-03"> + <includeColumn pattern="includeColumn-01" /> + <excludeColumn pattern="excludeColumn-01" /> + </includeTable> + + <excludeTable>excludeTable-01</excludeTable> + <excludeTable> + <pattern>excludeTable-02</pattern> + </excludeTable> + <excludeTable pattern="excludeTable-03" /> + + <includeColumn>includeColumn-01</includeColumn> + <includeColumn> + <pattern>includeColumn-02</pattern> + </includeColumn> + <includeColumn pattern="includeColumn-03" /> + <excludeColumn>excludeColumn-01</excludeColumn> + <excludeColumn> + <pattern>excludeColumn-02</pattern> + </excludeColumn> + <excludeColumn pattern="excludeColumn-03" /> + + <includeProcedure>includeProcedure-01</includeProcedure> + <includeProcedure> + <pattern>includeProcedure-02</pattern> + </includeProcedure> + <includeProcedure pattern="includeProcedure-03" /> + <excludeProcedure>excludeProcedure-01</excludeProcedure> + <excludeProcedure> + <pattern>excludeProcedure-02</pattern> + </excludeProcedure> + <excludeProcedure pattern="excludeProcedure-03" /> + </schema> + </catalog> + </cdbimport> + </target> + + +</project> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cayenne/blob/276f049c/cayenne-tools/src/test/resources/org/apache/cayenne/tools/build-catalog.xml ---------------------------------------------------------------------- diff --git a/cayenne-tools/src/test/resources/org/apache/cayenne/tools/build-catalog.xml b/cayenne-tools/src/test/resources/org/apache/cayenne/tools/build-catalog.xml new file mode 100644 index 0000000..32d7c7a --- /dev/null +++ b/cayenne-tools/src/test/resources/org/apache/cayenne/tools/build-catalog.xml @@ -0,0 +1,83 @@ +<!-- + ~ Licensed to the Apache Software Foundation (ASF) under one + ~ or more contributor license agreements. See the NOTICE file + ~ distributed with this work for additional information + ~ regarding copyright ownership. The ASF licenses this file + ~ to you under the Apache License, Version 2.0 (the + ~ "License"); you may not use this file except in compliance + ~ with the License. You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, + ~ software distributed under the License is distributed on an + ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + ~ KIND, either express or implied. See the License for the + ~ specific language governing permissions and limitations + ~ under the License. + --> + +<project name="MyProject" default="dist" basedir="."> + + <taskdef name="cdbimport" classname="org.apache.cayenne.tools.DbImporterTask" taskname="cdbimport" + classpath="${basedir}" /> + + <target name="dist"> + <cdbimport map="${context.dir}/WEB-INF/DefaultMap.map.xml" + adapter="org.apache.cayenne.dba.hsqldb.HSQLDBAdapter" + driver="org.hsqldb.jdbcDriver" + url="jdbc:hsqldb:hsql://localhost/bookmarker" + username="sa"> + + <catalog>catalog-name-01</catalog> + + <catalog> + <name>catalog-name-02</name> + </catalog> + + <catalog name="catalog-name-03"> + <includeTable>includeTable-01</includeTable> + + <includeTable> + <pattern>includeTable-02</pattern> + </includeTable> + + <includeTable pattern="includeTable-03"> + <includeColumn pattern="includeColumn-01" /> + <excludeColumn pattern="excludeColumn-01" /> + </includeTable> + + <excludeTable>excludeTable-01</excludeTable> + <excludeTable> + <pattern>excludeTable-02</pattern> + </excludeTable> + <excludeTable pattern="excludeTable-03" /> + + <includeColumn>includeColumn-01</includeColumn> + <includeColumn> + <pattern>includeColumn-02</pattern> + </includeColumn> + <includeColumn pattern="includeColumn-03" /> + <excludeColumn>excludeColumn-01</excludeColumn> + <excludeColumn> + <pattern>excludeColumn-02</pattern> + </excludeColumn> + <excludeColumn pattern="excludeColumn-03" /> + + <includeProcedure>includeProcedure-01</includeProcedure> + <includeProcedure> + <pattern>includeProcedure-02</pattern> + </includeProcedure> + <includeProcedure pattern="includeProcedure-03" /> + <excludeProcedure>excludeProcedure-01</excludeProcedure> + <excludeProcedure> + <pattern>excludeProcedure-02</pattern> + </excludeProcedure> + <excludeProcedure pattern="excludeProcedure-03" /> + </catalog> + + </cdbimport> + </target> + + +</project> \ No newline at end of file