You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by sk...@apache.org on 2016/12/19 12:03:12 UTC

[3/3] cayenne git commit: Merge branch '159'

Merge branch '159'


Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/62652ff7
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/62652ff7
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/62652ff7

Branch: refs/heads/master
Commit: 62652ff7731109d11cf239b796bc579f6b49167c
Parents: 63ce571 a026d83
Author: Savva Kolbachev <s....@gmail.com>
Authored: Mon Dec 19 15:02:58 2016 +0300
Committer: Savva Kolbachev <s....@gmail.com>
Committed: Mon Dec 19 15:02:58 2016 +0300

----------------------------------------------------------------------
 .../cayenne/dbsync/merge/DataMapMerger.java     |   3 +-
 .../dbsync/merge/token/AbstractMergerToken.java |  59 ++++++++
 .../dbsync/merge/token/DummyReverseToken.java   |  10 ++
 .../cayenne/dbsync/merge/token/MergerToken.java |   4 +-
 .../dbsync/merge/token/TokenComparator.java     |  58 -------
 .../merge/token/db/AbstractToDbToken.java       |  52 ++-----
 .../dbsync/merge/token/db/AddColumnToDb.java    |  11 +-
 .../merge/token/db/AddRelationshipToDb.java     |  11 +-
 .../dbsync/merge/token/db/CreateTableToDb.java  |   2 +-
 .../dbsync/merge/token/db/DropColumnToDb.java   |  12 +-
 .../merge/token/db/DropRelationshipToDb.java    |  11 +-
 .../dbsync/merge/token/db/DropTableToDb.java    |   2 +-
 .../dbsync/merge/token/db/SetAllowNullToDb.java |   2 +-
 .../merge/token/db/SetColumnTypeToDb.java       |   2 +-
 .../dbsync/merge/token/db/SetNotNullToDb.java   |   2 +-
 .../merge/token/db/SetPrimaryKeyToDb.java       |   2 +-
 .../merge/token/db/SetValueForNullToDb.java     |   2 +-
 .../merge/token/model/AbstractToModelToken.java |  34 +----
 .../merge/token/model/AddColumnToModel.java     |   2 +-
 .../token/model/AddRelationshipToModel.java     |   2 +-
 .../merge/token/model/CreateTableToModel.java   |   2 +-
 .../merge/token/model/DropColumnToModel.java    |   2 +-
 .../token/model/DropRelationshipToModel.java    |   2 +-
 .../merge/token/model/DropTableToModel.java     |   2 +-
 .../merge/token/model/SetAllowNullToModel.java  |   2 +-
 .../merge/token/model/SetColumnTypeToModel.java |   2 +-
 .../merge/token/model/SetNotNullToModel.java    |   2 +-
 .../merge/token/model/SetPrimaryKeyToModel.java |   4 +-
 .../dbsync/merge/token/TokenComparatorTest.java | 113 --------------
 .../dbsync/merge/token/TokenSortTest.java       | 150 +++++++++++++++++++
 .../tools/dbimport/DefaultDbImportAction.java   |   3 +-
 .../dbimport/DefaultDbImportActionTest.java     |   2 +-
 docs/doc/src/main/resources/RELEASE-NOTES.txt   |   1 +
 .../db/merge/MergerTokenSelectorController.java |   3 +-
 .../cayenne/tools/DbImporterMojoTest.java       |  14 +-
 .../dbimport/testComplexChangeOrder-pom.xml     |  42 ++++++
 .../dbimport/testComplexChangeOrder.map.xml     |  64 ++++++++
 .../testComplexChangeOrder.map.xml-result       |  54 +++++++
 .../tools/dbimport/testComplexChangeOrder.sql   |  34 +++++
 39 files changed, 478 insertions(+), 303 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/62652ff7/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/CreateTableToDb.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cayenne/blob/62652ff7/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/db/SetPrimaryKeyToDb.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cayenne/blob/62652ff7/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/merge/token/model/DropColumnToModel.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cayenne/blob/62652ff7/docs/doc/src/main/resources/RELEASE-NOTES.txt
----------------------------------------------------------------------
diff --cc docs/doc/src/main/resources/RELEASE-NOTES.txt
index bfa6f15,937d8e0..eb13a0e
--- a/docs/doc/src/main/resources/RELEASE-NOTES.txt
+++ b/docs/doc/src/main/resources/RELEASE-NOTES.txt
@@@ -19,11 -19,9 +19,12 @@@ CAY-2165 Explicit "contribution" API fo
  CAY-2166 Auto-loading of Cayenne modules
  CAY-2168 Split DbLoader to parts and clean it up
  CAY-2169 Split DbMerger to parts and clean it up
+ CAY-2170 MergeToken sorting is highly unstable
 +CAY-2172 Cleanup Modeler import and migrate db actions
 +CAY-2176 Java 7 diamond class generation templates
  
  Bug Fixes:
 +CAY-2174 Change FK attribute name cause ObjAttribute appear after Reverse Engineering
  
  ----------------------------------
  Release: 4.0.M4

http://git-wip-us.apache.org/repos/asf/cayenne/blob/62652ff7/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/merge/MergerTokenSelectorController.java
----------------------------------------------------------------------
diff --cc modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/merge/MergerTokenSelectorController.java
index 7f6d4da,0000000..21d0e82
mode 100644,000000..100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/merge/MergerTokenSelectorController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/merge/MergerTokenSelectorController.java
@@@ -1,240 -1,0 +1,239 @@@
 +/*****************************************************************
 + *   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.modeler.dialog.db.merge;
 +
 +import org.apache.cayenne.dbsync.merge.context.MergeDirection;
 +import org.apache.cayenne.dbsync.merge.token.MergerToken;
- import org.apache.cayenne.dbsync.merge.token.TokenComparator;
 +import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactory;
 +import org.apache.cayenne.modeler.Application;
 +import org.apache.cayenne.modeler.util.CayenneController;
 +import org.apache.cayenne.swing.BindingBuilder;
 +import org.apache.cayenne.swing.ObjectBinding;
 +
 +import javax.swing.*;
 +import javax.swing.table.AbstractTableModel;
 +import javax.swing.table.TableColumn;
 +import javax.swing.table.TableColumnModel;
 +import javax.swing.table.TableModel;
 +import java.awt.*;
 +import java.util.ArrayList;
 +import java.util.Collections;
 +import java.util.HashSet;
 +import java.util.List;
 +import java.util.Set;
 +
 +public class MergerTokenSelectorController extends CayenneController {
 +
 +    protected MergerTokenSelectorView view;
 +    protected ObjectBinding tableBinding;
 +
 +    protected MergerToken token;
 +    protected int permanentlyExcludedCount;
 +    protected Set<MergerToken> excludedTokens;
 +    protected List<MergerToken> selectableTokensList;
 +    protected MergerTokenFactory mergerTokenFactory;
 +
 +    public MergerTokenSelectorController(CayenneController parent) {
 +        super(parent);
 +        this.view = new MergerTokenSelectorView();
 +        this.excludedTokens = new HashSet<MergerToken>();
 +        this.selectableTokensList = new ArrayList<MergerToken>();
 +        initController();
 +    }
 +
 +    public void setMergerTokenFactory(MergerTokenFactory mergerTokenFactory) {
 +        this.mergerTokenFactory = mergerTokenFactory;
 +    }
 +
 +    public void setTokens(List<MergerToken> tokens) {
 +        selectableTokensList.clear();
 +        selectableTokensList.addAll(tokens);
 +        excludedTokens.addAll(tokens);
 +    }
 +
 +    public List<MergerToken> getSelectedTokens() {
 +        List<MergerToken> t = new ArrayList<MergerToken>(selectableTokensList);
 +        t.removeAll(excludedTokens);
 +        return Collections.unmodifiableList(t);
 +    }
 +
 +    public List<MergerToken> getSelectableTokens() {
 +        return Collections.unmodifiableList(selectableTokensList);
 +    }
 +    
 +    public void removeToken(MergerToken token) {
 +        selectableTokensList.remove(token);
 +        excludedTokens.remove(token);
 +
 +        AbstractTableModel model = (AbstractTableModel) view.getTokens().getModel();
 +        model.fireTableDataChanged();
 +    }
 +
 +    // ----- properties -----
 +
 +    public Component getView() {
 +        return view;
 +    }
 +
 +    /**
 +     * Called by table binding script to set current token.
 +     */
 +    public void setToken(MergerToken token) {
 +        this.token = token;
 +    }
 +
 +    /**
 +     * Returns {@link MergerToken}s that are excluded from DB generation.
 +     */
 +    /*
 +     * public Collection getExcludedTokens() { return excludedTokens; }
 +     */
 +
 +    public boolean isIncluded() {
 +        if (token == null) {
 +            return false;
 +        }
 +
 +        return !excludedTokens.contains(token);
 +    }
 +
 +    public void setIncluded(boolean b) {
 +        if (token == null) {
 +            return;
 +        }
 +
 +        if (b) {
 +            excludedTokens.remove(token);
 +        }
 +        else {
 +            excludedTokens.add(token);
 +        }
 +
 +        tableSelectedAction();
 +    }
 +
 +    /**
 +     * A callback action that updates the state of Select All checkbox.
 +     */
 +    public void tableSelectedAction() {
 +        int unselectedCount = excludedTokens.size() - permanentlyExcludedCount;
 +
 +        if (unselectedCount == selectableTokensList.size()) {
 +            view.getCheckAll().setSelected(false);
 +        }
 +        else if (unselectedCount == 0) {
 +            view.getCheckAll().setSelected(true);
 +        }
 +    }
 +
 +    // ------ other stuff ------
 +
 +    protected void initController() {
 +        BindingBuilder builder = new BindingBuilder(
 +                getApplication().getBindingFactory(),
 +                this);
 +
 +        builder.bindToAction(view.getCheckAll(), "checkAllAction()");
 +        builder.bindToAction(view.getReverseAll(), "reverseAllAction()");
 +
 +        TableModel model = new MergerTokenTableModel(this);
 +
 +        MergeDirection[] dirs = new MergeDirection[] {
 +                MergeDirection.TO_DB, MergeDirection.TO_MODEL
 +        };
 +
 +        view.getTokens().setModel(model);
 +
 +        TableColumnModel columnModel = view.getTokens().getColumnModel();
 +        
 +        // dropdown for direction column
 +        JComboBox directionCombo = Application.getWidgetFactory().createComboBox(dirs, false);
 +        directionCombo.setEditable(false);
 +        TableColumn directionColumn = columnModel.getColumn(
 +                MergerTokenTableModel.COL_DIRECTION);
 +        directionColumn.setCellEditor(new DefaultCellEditor(directionCombo));
 +
 +        columnModel.getColumn(MergerTokenTableModel.COL_SELECT).setPreferredWidth(50);
 +        columnModel.getColumn(MergerTokenTableModel.COL_DIRECTION).setPreferredWidth(100);
 +        columnModel.getColumn(MergerTokenTableModel.COL_SELECT).setMaxWidth(50);
 +        columnModel.getColumn(MergerTokenTableModel.COL_DIRECTION).setMaxWidth(100);
 +    }
 +
 +    public boolean isSelected(MergerToken token) {
 +        return (selectableTokensList.contains(token) && !excludedTokens.contains(token));
 +    }
 +
 +    public void select(MergerToken token, boolean select) {
 +        if (select) {
 +            excludedTokens.remove(token);
 +        }
 +        else {
 +            excludedTokens.add(token);
 +        }
 +    }
 +
 +    public void setDirection(MergerToken token, MergeDirection direction) {
 +        if (token.getDirection().equals(direction)) {
 +            return;
 +        }
 +        int i = selectableTokensList.indexOf(token);
 +        MergerToken reverse = token.createReverse(mergerTokenFactory);
 +        selectableTokensList.set(i, reverse);
 +        if (excludedTokens.remove(token)) {
 +            excludedTokens.add(reverse);
 +        }
 +        
 +        /**
 +         * Repaint, so that "Operation" column updates properly
 +         */
 +        view.getTokens().repaint();
 +    }
 +
 +    public void checkAllAction() {
 +
 +        boolean isCheckAllSelected = view.getCheckAll().isSelected();
 +
 +        if (isCheckAllSelected) {
 +            excludedTokens.clear();
 +        }
 +        else {
 +            excludedTokens.addAll(selectableTokensList);
 +        }
 +
 +        AbstractTableModel model = (AbstractTableModel) view.getTokens().getModel();
 +        model.fireTableDataChanged();
 +    }
 +
 +    public void reverseAllAction() {
 +        
 +        for (int i = 0; i < selectableTokensList.size(); i++) {
 +            MergerToken token = selectableTokensList.get(i);
 +            MergerToken reverse = token.createReverse(mergerTokenFactory);
 +            selectableTokensList.set(i, reverse);
 +            if (excludedTokens.remove(token)) {
 +                excludedTokens.add(reverse);
 +            }
 +        }
 +
-         Collections.sort(selectableTokensList, new TokenComparator());
++        Collections.sort(selectableTokensList);
 +        AbstractTableModel model = (AbstractTableModel) view.getTokens().getModel();
 +        model.fireTableDataChanged();
 +    }
 +}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/62652ff7/plugins/maven-cayenne-plugin/src/test/java/org/apache/cayenne/tools/DbImporterMojoTest.java
----------------------------------------------------------------------