001package gu.sql2java.generator;
002
003import java.util.ArrayList;
004import java.util.HashMap;
005import java.util.List;
006
007import gu.sql2java.generator.Column;
008import gu.sql2java.generator.StringUtilities;
009
010public class Procedure {
011        private static final String IN_COLUMN = "IN";
012        private static final String IN_OUT_COLUMN = "INOUT";
013        private static final String OUT_COLUMN = "OUT";
014        private String name;
015        private String sqlName;
016        private String remarks;
017        private String returnType;
018        private List<Column> columns = new ArrayList<Column>();
019        private List<Column> inColumns = new ArrayList<Column>();
020        private List<Column> outColumns = new ArrayList<Column>();
021        private HashMap<String,Column> colsHash = new HashMap<>();
022        private int position = 1;
023
024        private int nextPosition() {
025                return this.position++;
026        }
027
028        private boolean addColumn(Column column) {
029                if (null == this.colsHash.get(column.getName())) {
030                        column.setOrdinalPosition(this.nextPosition());
031                        this.columns.add(column);
032                        this.colsHash.put(column.getName(), column);
033                        return true;
034                }
035                return false;
036        }
037
038        public void addInColumn(Column column) {
039                column.setDefaultValue(IN_COLUMN);
040                if (this.addColumn(column)) {
041                        this.inColumns.add(column);
042                }
043        }
044
045        public void addInOutColumn(Column column) {
046                column.setDefaultValue(IN_OUT_COLUMN);
047                if (this.addColumn(column)) {
048                        this.inColumns.add(column);
049                        this.outColumns.add(column);
050                }
051        }
052
053        public void addOutColumn(Column column) {
054                column.setDefaultValue(OUT_COLUMN);
055                if (this.addColumn(column)) {
056                        this.outColumns.add(column);
057                }
058        }
059
060        public int getColumnsCount() {
061                return this.columns.size();
062        }
063
064        public int getOutColumnsCount() {
065                return this.outColumns.size();
066        }
067
068        public Column[] getColumns() {
069                return this.columns.toArray(new Column[this.columns.size()]);
070        }
071
072        public Column[] getInColumns() {
073                return this.inColumns.toArray(new Column[this.inColumns.size()]);
074        }
075
076        public Column[] getOutColumns() {
077                return this.outColumns.toArray(new Column[this.outColumns.size()]);
078        }
079
080        public String getName() {
081                return this.name;
082        }
083
084        public void setName(String name) {
085                this.sqlName = name;
086                this.name = StringUtilities.convertName((String) name, (boolean) true);
087        }
088
089        public String getSqlName() {
090                return this.sqlName;
091        }
092
093        public String getRemarks() {
094                return this.remarks;
095        }
096
097        public void setRemarks(String remarks) {
098                this.remarks = remarks;
099        }
100
101        public String getReturnType() {
102                return this.returnType;
103        }
104
105        public void setReturnType(String returnType) {
106                this.returnType = returnType;
107        }
108}