package ru.gazprom.gtnn.minos.entity;
import java.util.ArrayList;
import java.util.List;
import com.google.common.base.Preconditions;
import ru.gazprom.gtnn.minos.annotations.TableColumn;
import ru.gazprom.gtnn.minos.annotations.TableName;
import ru.gazprom.gtnn.minos.util.DatabaseConnectionKeeper;
import ru.gazprom.gtnn.minos.util.DatabaseConnectionKeeper.RecordFeld;
@TableName(name = "CompetenceTable")
public class CompetenceNode extends BasicNode<Integer> {
@TableColumn
public int competenceID;
@TableColumn
public String competenceName;
@TableColumn
public String competenceDescr;
@TableColumn
public int competenceItem;
@TableColumn
public int competenceVariety;
@TableColumn
public String competenceHost;
@TableColumn
public int competenceMode;
@TableColumn
public int competenceCatalogID;
@TableColumn
public int competenceIncarnatio;
@TableColumn
public int competenceChainNumber;
@TableColumn
public java.util.Date competenceCreate;
@TableColumn
public java.util.Date competenceRemove;
public List<Integer> indicators;
public static final int COMPETENCE_NAME = 1;
public static final int COMPETENCE_DESCR = 2;
public static final int COMPETENCE_ITEM = 4;
public static final int COMPETENCE_VARIETY = 8;
public static final int COMPETENCE_HOST = 16;
public static final int COMPETENCE_MODE = 32;
public static final int COMPETENCE_CATALOG = 64;
public static final int COMPETENCE_INCARNATIO = 128;
public static final int COMPETENCE_CHAIN_NUMBER = 256;
public static final int COMPETENCE_CREATE = 512;
public static final int COMPETENCE_REMOVE = 1024;
public static final int COMPETENCE_ID = 2048;
public void insert(DatabaseConnectionKeeper kdb, int flags, boolean flagNevCompetence) throws Exception{
List<RecordFeld> lst = makeListParam(flags);
Preconditions.checkNotNull(lst, "CompetenceNode.insert() : makeListParam() return null");
try {
competenceID = kdb.insertRow(true, names.get("CompetenceTable"), lst);
if (flagNevCompetence) {
competenceIncarnatio = competenceID;
update(kdb, COMPETENCE_INCARNATIO);
}
} catch (Exception e) {
e.printStackTrace();
throw e;
} finally {
if(lst != null)
lst.clear();
}
}
public void update(DatabaseConnectionKeeper kdb, int flags) throws Exception {
Preconditions.checkArgument(competenceID != -1, "CompetenceNode.update() : competenceID field have incorrect value");
List<RecordFeld> lst = makeListParam(flags);
Preconditions.checkNotNull(lst, "CompetenceNode.update() : makeListParam() return null");
try {
kdb.updateRow( names.get("CompetenceTable"), lst, new RecordFeld(java.sql.Types.INTEGER, names.get("competenceID"), competenceID) );
} catch (Exception e) {
e.printStackTrace();
throw e;
} finally {
if(lst != null)
lst.clear();
}
}
/**
* Make parameters list for insert in table
* @param flags - define fields for insert, over filed must be have default value
*/
private List<RecordFeld> makeListParam(int flags) {
if(names == null)
return null;
if(names.get("CompetenceTable") == null)
return null;
List<RecordFeld> lst = new ArrayList<>();
if(((flags & COMPETENCE_NAME) != 0) && (names.get("competenceName") != null) )
lst.add(new RecordFeld(java.sql.Types.VARCHAR, names.get("competenceName"), competenceName));
if(((flags & COMPETENCE_DESCR) != 0) && (names.get("competenceDescr") != null) )
lst.add(new RecordFeld(java.sql.Types.VARCHAR, names.get("competenceDescr"), competenceDescr));
if(((flags & COMPETENCE_HOST) != 0) && (names.get("competenceHost") != null) )
lst.add(new RecordFeld(java.sql.Types.VARCHAR, names.get("competenceHost"), competenceHost));
if(((flags & COMPETENCE_ITEM) != 0) && (names.get("competenceItem") != null) )
lst.add(new RecordFeld(java.sql.Types.INTEGER, names.get("competenceItem"), competenceItem));
if(((flags & COMPETENCE_VARIETY) != 0) && (names.get("competenceVariety") != null) )
lst.add(new RecordFeld(java.sql.Types.INTEGER, names.get("competenceVariety"), competenceVariety));
if(((flags & COMPETENCE_MODE) != 0) && (names.get("competenceMode") != null) )
lst.add(new RecordFeld(java.sql.Types.INTEGER, names.get("competenceMode"), competenceMode));
if(((flags & COMPETENCE_CATALOG) != 0) && (names.get("competenceCatalogID") != null) )
lst.add(new RecordFeld(java.sql.Types.INTEGER, names.get("competenceCatalogID"), competenceCatalogID));
if(((flags & COMPETENCE_INCARNATIO) != 0) && (names.get("competenceIncarnatio") != null) )
lst.add(new RecordFeld(java.sql.Types.INTEGER, names.get("competenceIncarnatio"), competenceIncarnatio));
if(((flags & COMPETENCE_CHAIN_NUMBER) != 0) && (names.get("competenceChainNumber") != null) )
lst.add(new RecordFeld(java.sql.Types.INTEGER, names.get("competenceChainNumber"), competenceChainNumber));
if(((flags & COMPETENCE_ID) != 0) && (names.get("competenceID") != null) )
lst.add(new RecordFeld(java.sql.Types.INTEGER, names.get("competenceID"), competenceID));
if(((flags & COMPETENCE_CREATE) != 0) && (names.get("competenceCreate") != null) )
lst.add(new RecordFeld(java.sql.Types.DATE, names.get("competenceCreate"), competenceCreate));
if(((flags & COMPETENCE_REMOVE) != 0) && (names.get("competenceRemove") != null) )
lst.add(new RecordFeld(java.sql.Types.DATE, names.get("competenceRemove"), competenceRemove));
return lst;
}
@Override
public String toString() {
return competenceName;
}
@Override
public boolean equals(Object obj) {
if(obj == null)
return false;
if(obj == this)
return true;
if( !(obj instanceof CompetenceNode))
return false;
return (this.competenceID == ((CompetenceNode)obj).competenceID ? true : false);
}
@Override
public int hashCode() {
return competenceID;
}
@Override
public Integer getID() {
return competenceID;
}
}