📄 dfdbkb.java
字号:
ResultSet rs = null;
ResultSet rsS = null;
String descrId = null;
try{
PreparedStatements pss = getPreparedStatements();
// Check if there is a DFD corresponding to aidN and get lease time
pss.stm_selLease.setString(1, aidN);
rs = pss.stm_selLease.executeQuery();
if (rs.next()) {
dfd = new DFAgentDescription();
id = getAID(aidN);
dfd.setName(id);
String sLease = rs.getString("lease");
descrId = rs.getString("id");
long lease = Long.parseLong(sLease);
if (lease != -1) {
dfd.setLeaseTime(new Date(lease));
}
}
else {
return null;
}
closeResultSet(rs);
// Protocols
loadProtocols(descrId, dfd, allProtocols);
// Languages
loadLanguages(descrId, dfd, allLanguages);
// Ontologies
loadOntologies(descrId, dfd, allOntologies);
// Services
pss.stm_selServices.setString(1, descrId);
rs = pss.stm_selServices.executeQuery();
while(rs.next()) {
ServiceDescription sd = new ServiceDescription();
String serviceId = rs.getString("id");
sd.setName(rs.getString("sname"));
sd.setType(rs.getString("stype"));
sd.setOwnership(rs.getString("sownership"));
// Service protocols
pss.stm_selServiceProtocols.setString(1, serviceId);
rsS = pss.stm_selServiceProtocols.executeQuery();
while(rsS.next()){
sd.addProtocols(rsS.getString(PROTOCOL));
}
closeResultSet(rsS);
// Service languages
pss.stm_selServiceLanguages.setString(1, serviceId);
rsS = pss.stm_selServiceLanguages.executeQuery();
while(rsS.next()){
sd.addOntologies(rsS.getString(ONTOLOGY));
}
closeResultSet(rsS);
// Service ontologies
pss.stm_selServiceOntologies.setString(1, serviceId);
rsS = pss.stm_selServiceOntologies.executeQuery();
while(rsS.next()){
sd.addLanguages(rsS.getString(LANGUAGE));
}
closeResultSet(rsS);
// Service properties
pss.stm_selServiceProperties.setString(1, serviceId);
rsS = pss.stm_selServiceProperties.executeQuery();
while(rsS.next()){
Property prop = new Property();
prop.setName(rsS.getString("propkey"));
String objStrVal = rsS.getString("propval_obj");
String strStrVal = rsS.getString("propval_str");
Object value = ( objStrVal == null )? strStrVal : deserializeObj(objStrVal);
prop.setValue(value);
sd.addProperties(prop);
}
dfd.addServices(sd);
}
}
catch (SQLException sqle) {
// Let it through
throw sqle;
}
catch (Exception e) {
logger.log(Logger.SEVERE, "Unexpected error retrieving DFD for agent "+aidN, e);
throw new SQLException("Unexpected error retrieving DFD for agent "+aidN+". "+e.getMessage());
}
finally {
closeResultSet(rs);
closeResultSet(rsS);
}
return dfd;
}
private final void loadOntologies(String descrId, DFAgentDescription dfd, Map allOntologies) throws SQLException {
if (allOntologies != null) {
List ontos = (List) allOntologies.get(descrId);
if (ontos != null) {
Iterator it = ontos.iterator();
while (it.hasNext()) {
dfd.addOntologies((String) it.next());
}
}
}
else {
PreparedStatements pss = getPreparedStatements();
pss.stm_selOntologies.setString(1, descrId);
ResultSet rs = pss.stm_selOntologies.executeQuery();
while(rs.next()){
dfd.addOntologies(rs.getString(ONTOLOGY));
}
closeResultSet(rs);
}
}
private final void loadLanguages(String descrId, DFAgentDescription dfd, Map allLanguages) throws SQLException {
if (allLanguages != null) {
List langs = (List) allLanguages.get(descrId);
if (langs != null) {
Iterator it = langs.iterator();
while (it.hasNext()) {
dfd.addLanguages((String) it.next());
}
}
}
else {
PreparedStatements pss = getPreparedStatements();
pss.stm_selLanguages.setString(1, descrId);
ResultSet rs = pss.stm_selLanguages.executeQuery();
while(rs.next()){
dfd.addLanguages(rs.getString(LANGUAGE));
}
closeResultSet(rs);
}
}
private final void loadProtocols(String descrId, DFAgentDescription dfd, Map allProtocols) throws SQLException {
if (allProtocols != null) {
List protos = (List) allProtocols.get(descrId);
if (protos != null) {
Iterator it = protos.iterator();
while (it.hasNext()) {
dfd.addProtocols((String) it.next());
}
}
}
else {
PreparedStatements pss = getPreparedStatements();
pss.stm_selProtocols.setString(1, descrId);
ResultSet rs = pss.stm_selProtocols.executeQuery();
while(rs.next()){
dfd.addProtocols(rs.getString(PROTOCOL));
}
closeResultSet(rs);
}
}
/**
* Deletes the AID corresponding to the indicated agent name
* including all its resolver AIDs (if there are no df descriptions left for them)
*/
private void removeAID(String aid) throws SQLException {
PreparedStatements pss = getPreparedStatements();
// check whether there exists a DF description for the agent
pss.stm_selNrOfDescrForAID.setString(1, aid);
ResultSet rs = pss.stm_selNrOfDescrForAID.executeQuery();
int found = 0;
if (rs.next())
found = Integer.parseInt(rs.getString(1));
// no description found --> delete
if (found == 0) {
// user definded slots
pss.stm_delAgentUserDefSlot.setString(1, aid);
pss.stm_delAgentUserDefSlot.execute();
// resolvers
Collection resolverAIDs = getResolverAIDs(aid);
Iterator iter = resolverAIDs.iterator();
while (iter.hasNext()) {
removeAID((String)iter.next());
}
pss.stm_delAgentResolver.setString(1, aid);
pss.stm_delAgentResolver.execute();
// address
pss.stm_delAgentAddress.setString(1, aid);
pss.stm_delAgentAddress.execute();
}
}
/**
* Deletes all services corresponding to the indicated description ID
* @throws SQLException
*/
private void removeServices(String descrId) throws SQLException {
ResultSet rs = null;
PreparedStatements pss = getPreparedStatements();
pss.stm_selServiceId.setString(1, descrId);
rs = pss.stm_selServiceId.executeQuery();
boolean executeBatch = false;
while (rs.next()) {
String serviceId = rs.getString("id");
pss.stm_delServiceLanguage.setString(1, serviceId);
pss.stm_delServiceLanguage.addBatch();
pss.stm_delServiceOntology.setString(1, serviceId);
pss.stm_delServiceOntology.addBatch();
pss.stm_delServiceProtocol.setString(1, serviceId);
pss.stm_delServiceProtocol.addBatch();
pss.stm_delServiceProperty.setString(1, serviceId);
pss.stm_delServiceProperty.addBatch();
pss.stm_delService.setString(1, descrId);
pss.stm_delService.addBatch();
executeBatch = true;
}
rs.close();
if (executeBatch) {
pss.stm_delServiceLanguage.executeBatch();
pss.stm_delServiceOntology.executeBatch();
pss.stm_delServiceProtocol.executeBatch();
pss.stm_delServiceProperty.executeBatch();
pss.stm_delService.executeBatch();
}
}
/**
* Delete the DFD object corresponding to the indicated agent name.
*/
private void remove(String aid) throws SQLException {
ResultSet rs = null;
Connection conn = getConnectionWrapper().getConnection();
try {
PreparedStatements pss = getPreparedStatements();
// get description ID
pss.stm_selDescrId.setString(1, aid);
rs = pss.stm_selDescrId.executeQuery();
if (rs.next()) {
String descrId = rs.getString("id");
closeResultSet(rs);
// ontologies
pss.stm_delOntology.setString(1, descrId);
pss.stm_delOntology.execute();
// protocols
pss.stm_delProtocol.setString(1, descrId);
pss.stm_delProtocol.execute();
// languages
pss.stm_delLanguage.setString(1, descrId);
pss.stm_delLanguage.execute();
// services
removeServices(descrId);
// agent description
pss.stm_delAgentDescr.setString(1, descrId);
pss.stm_delAgentDescr.execute();
// AID
removeAID(aid);
conn.commit();
} else {
if(logger.isLoggable(Logger.FINE))
logger.log(Logger.FINE,"No DF description found to remove for agent '"+aid+"'");
}
}
catch(SQLException sqle){
try {
conn.rollback();
} catch (SQLException se) {
logger.log(Logger.SEVERE,"Rollback for incomplete remotion of DFD for agent "+aid + " failed.", se);
}
throw sqle;
} finally {
closeResultSet(rs);
}
}
/**
* Convert a template DFAgentDescription into the SQL SELECT
* operation that returns the AID names whose DFAgentDescriptions
* match the given template.
*/
private String createSelect(DFAgentDescription dfdTemplate) throws Exception {
StringBuffer select = new StringBuffer("SELECT dfagentdescr.aid FROM dfagentdescr");
List lAs = new ArrayList();
List lWhere = new ArrayList();
// Name
AID agentAID = dfdTemplate.getName();
if(agentAID != null){
lWhere.add(" dfagentdescr.aid = '"+agentAID.getName()+"'");
}
// Lease time
Date lease = dfdTemplate.getLeaseTime();
long currTime = System.currentTimeMillis();
lWhere.add(" (dfagentdescr.lease = '-1' OR dfagentdescr.lease > '"+currTime+"')");
// Languages
Iterator iter = dfdTemplate.getAllLanguages();
int i=0;
while(iter.hasNext()){
String tmp = LANGUAGE+i;
lAs.add(", language "+tmp);
lWhere.add(tmp+".language='"+(String)iter.next()+"'");
lWhere.add(tmp+".descrid=dfagentdescr.id");
i++;
}
// Ontologies
iter = dfdTemplate.getAllOntologies();
i = 0;
while(iter.hasNext()){
String tmp = ONTOLOGY+i;
lAs.add(", ontology "+tmp);
lWhere.add(tmp+".ontology='"+(String)iter.next()+"'");
lWhere.add(tmp+".descrid=dfagentdescr.id");
i++;
}
// Protocols
iter = dfdTemplate.getAllProtocols();
i = 0;
while(iter.hasNext()){
String tmp = PROTOCOL+i;
lAs.add(", protocol "+tmp);
lWhere.add(tmp+".protocol='"+(String)iter.next()+"'");
lWhere.add(tmp+".descrid=dfagentdescr.id");
i++;
}
// Services
iter = dfdTemplate.getAllServices();
i = 0;
while(iter.hasNext()){
ServiceDescription service = (ServiceDescription)iter.next();
String serviceName = service.getName();
String serviceType = service.getType();
String serviceOwner = service.getOwnership();
// Service name, type and ownership
String tmp = SERVICE+i;
lAs.add(", service "+tmp);
if(serviceName != null){
lWhere.add(tmp+".sname='"+serviceName+"'");
}
if(serviceType != null){
lWhere.add(tmp+".stype='"+serviceType+"'");
}
if(serviceOwner != null){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -