package org.oliot.epcis.serde.sql; import java.util.Date; import java.util.List; import java.util.Map; import javax.xml.parsers.ParserConfigurationException; import org.hibernate.Criteria; import org.hibernate.criterion.Restrictions; import org.oliot.epcis.configuration.Configuration; import org.oliot.model.oliot.ExtensionMap; import org.w3c.dom.Document; import org.w3c.dom.Element; public class ReaderUtility { static Element putAny(Map<Integer, ExtensionMap> map, int left,int[] level, Element element, List<Object> elementList,Document doc, Edge edge) throws ParserConfigurationException{ //, Element element, Boolean parent if(map.get(left).getRightNodeNumber()==map.get(left).getLeftNodeNumber()+1){ String leafQname=map.get(left).getqName(); //Configuration.logger.info(leafQname); //WriteUtility.rightNodeNumber=WriteUtility.leftNodeNumber+1; //WriteUtility.leftNodeNumber=WriteUtility.rightNodeNumber; edge.setRightNodeNumber(edge.getLeftNodeNumber()+1); edge.setLeftNodeNumber(edge.getRightNodeNumber()); String leafnamespaceURI=""; String leafLocalName=""; if(leafQname.split("#").length>0) leafnamespaceURI=leafQname.split("#")[0]; if(leafQname.split("#").length>1) leafLocalName=leafQname.split("#")[1]; String leafPrefix=map.get(left).getPrefixValue(); if(leafPrefix==null){ leafPrefix="sample"; } String leafValue=ReaderUtility.getValueStringFormat(map.get(left)); Element leafElement=doc.createElement(leafPrefix+":"+leafLocalName); if(leafPrefix !=null && leafnamespaceURI != null){ leafElement.setAttribute("xmlns:"+leafPrefix, leafnamespaceURI); //leafElement.setAttribute("xsi:type:"+leafPrefix, leafnamespaceURI); } if(leafValue != null){ leafElement.setTextContent(leafValue); } if(level[0]==0){ //Configuration.logger.info(map.get(left).getqName()+ " added to object List"); elementList.add(leafElement); }else{ //Configuration.logger.info(map.get(left).getqName()+ " added to parent element"); level[0]--; element.appendChild(leafElement); } }else{ String parentQname=map.get(left).getqName(); String parentNamespaceURI=parentQname.split("#")[0]; String parentLocalName=""; if(map.get(left).getqName().equals("parent")){ //do nothing }else{ parentLocalName=parentQname.split("#")[1]; } String parentPrefix="myexample"; Element parentElement=doc.createElement(parentPrefix+":"+parentLocalName); if(parentPrefix !=null && parentNamespaceURI != null){ parentElement.setAttribute("xmlns:"+parentPrefix, parentNamespaceURI); } int node=map.get(left).getRightNodeNumber(); if(map.get(left).getqName().equals("parent")){ //do nothing }else{ //Configuration.logger.info("Parent: "+map.get(left).getqName()); level[0]++; //Element parentElement } do{ //int next=left+1; if(level[0]==0 && !map.get(left).getqName().equals("parent")){ level[0]++; } //WriteUtility.leftNodeNumber++; //int next=WriteUtility.leftNodeNumber; edge.setLeftNodeNumber(edge.getLeftNodeNumber()+1); int next=edge.getLeftNodeNumber(); putAny( map, next,level,parentElement,elementList,doc, edge); //while(WriteUtility.leftNodeNumber+1<node); }while(edge.getLeftNodeNumber()+1<node); //Configuration.logger.info("After the sequence"+map.get(left).getqName()); //Configuration.logger.info("int value"+ level[0]); //WriteUtility.rightNodeNumber=WriteUtility.leftNodeNumber+1; //WriteUtility.leftNodeNumber=WriteUtility.rightNodeNumber; edge.setRightNodeNumber(edge.getLeftNodeNumber()+1); edge.setLeftNodeNumber(edge.getRightNodeNumber()); if(level[0]==0 && !map.get(left).getqName().equals("parent")){ //Configuration.logger.info(map.get(left).getqName()+ " added to object List"); elementList.add(parentElement); }else if(!map.get(left).getqName().equals("parent")){ //Configuration.logger.info(map.get(left).getqName()+ " added to parent element"); level[0]--; element.appendChild(parentElement); } } return null; } static String getValueStringFormat(ExtensionMap extensionMap){ String value=""; String type=extensionMap.getDataType(); try{ if(type!=null){ if(type.equals("int")){ value=Integer.toString(extensionMap.getIntValue()); }else if(type.equals("float")){ value=Float.toString(extensionMap.getFloatValue()); }else if(type.equals("boolean")){ if(extensionMap.getBoleanValue()==1){ value="true"; }else{ value="fale"; } //value=Boolean.toString(extensionMap.isBoleanValue()); }else if(type.equals("dateTime")){ value=extensionMap.getTimeValue().toString(); }else{ value=extensionMap.getStringValue(); } } }catch(Exception e){ value=extensionMap.getStringValue(); } return value; } public static void getValueTypeList(List<PairType> ValueTypeList, List<String> valueList){ if(valueList!=null){ for(int i=0; i<valueList.size(); i++){ String[] valueArr=valueList.get(i).split("\\^"); PairType pairType=new PairType(); if(valueArr.length>1){ String value=valueArr[0].trim(); String type=valueArr[1].trim(); if(type.equals("int")){ pairType.setType("int"); pairType.setValue(value); ValueTypeList.add(pairType); }else if(type.equals("long")){ pairType.setType("int"); pairType.setValue(value); ValueTypeList.add(pairType); }else if(type.equals("float")){ pairType.setType("float"); pairType.setValue(value); ValueTypeList.add(pairType); }else if(type.equals("double")){ pairType.setType("float"); pairType.setValue(value); ValueTypeList.add(pairType); }else if(type.equals("boolean")){ pairType.setType("boolean"); pairType.setValue(value); ValueTypeList.add(pairType); }else if(type.equals("dateTime")){ pairType.setType("dateTime"); pairType.setValue(value); ValueTypeList.add(pairType); }else if(type.equals("time")){ pairType.setType("dateTime"); pairType.setValue(value); ValueTypeList.add(pairType); }else { pairType.setType("String"); pairType.setValue(value); ValueTypeList.add(pairType); } }else{ pairType.setType("String"); pairType.setValue("value"); ValueTypeList.add(pairType); } } } } public static void extensionHierarchCriteria_EQ_qName(Criteria criteria, String qName, String alias, int isInner){ try{ criteria.add(Restrictions.and(Restrictions.eq(alias+".qName", qName), Restrictions.eq(alias+".innerValue",isInner))); }catch(Exception e ){ Configuration.logger.log(null, e.getMessage()); } } public static void extensionHierarchCriteria_EQ(Criteria criteria, List<PairType> ValueTypeList, String qName, String alias, int isInner){ try{ for(int i=0; i<ValueTypeList.size(); i++){ String dataType=ValueTypeList.get(i).getType(); if(dataType.equals("int")){ int intValue=Integer.parseInt(ValueTypeList.get(i).getValue()); criteria.add(Restrictions.and(Restrictions.eq(alias+".qName", qName), Restrictions.and(Restrictions.eq(alias+".innerValue",isInner), Restrictions.eq(alias+".intValue", intValue)))); }else if(dataType.equals("float")){ float floatValue=Float.parseFloat(ValueTypeList.get(i).getValue()); criteria.add(Restrictions.and(Restrictions.eq(alias+".qName", qName), Restrictions.and(Restrictions.eq(alias+".innerValue",isInner), Restrictions.eq(alias+".floatValue", floatValue)))); }else if(dataType.equals("boolean")){ Boolean booleanValue=Boolean.parseBoolean(ValueTypeList.get(i).getValue()); criteria.add(Restrictions.and(Restrictions.eq(alias+".qName", qName), Restrictions.and(Restrictions.eq(alias+".innerValue",isInner), Restrictions.eq(alias+".boleanValue", booleanValue)))); }else if(dataType.equals("dateTime")){ Date dateValue=WriteUtility.getDateTimeAny(ValueTypeList.get(i).getValue()); criteria.add(Restrictions.and(Restrictions.eq(alias+".qName", qName), Restrictions.and(Restrictions.eq(alias+".innerValue",isInner), Restrictions.eq(alias+".timeValue", dateValue)))); }else{ String stringValue=ValueTypeList.get(i).getValue(); criteria.add(Restrictions.and(Restrictions.eq(alias+".qName", qName), Restrictions.and(Restrictions.eq(alias+".innerValue",isInner), Restrictions.eq(alias+".stringValue", stringValue)))); } } }catch(Exception e ){ Configuration.logger.log(null, e.getMessage()); } } public static void extensionHierarchCriteria_GT(Criteria criteria, List<PairType> ValueTypeList, String qName, String alias, int isInner){ try{ for(int i=0; i<ValueTypeList.size(); i++){ String dataType=ValueTypeList.get(i).getType(); if(dataType.equals("int")){ int intValue=Integer.parseInt(ValueTypeList.get(i).getValue()); criteria.add(Restrictions.and(Restrictions.eq(alias+".qName", qName), Restrictions.and(Restrictions.eq(alias+".innerValue",isInner), Restrictions.gt(alias+".intValue", intValue)))); }else if(dataType.equals("float")){ float floatValue=Float.parseFloat(ValueTypeList.get(i).getValue()); criteria.add(Restrictions.and(Restrictions.eq(alias+".qName", qName), Restrictions.and(Restrictions.eq(alias+".innerValue",isInner), Restrictions.gt(alias+".floatValue", floatValue)))); }else if(dataType.equals("dateTime")){ Date dateValue=WriteUtility.getDateTimeAny(ValueTypeList.get(i).getValue()); criteria.add(Restrictions.and(Restrictions.eq(alias+".qName", qName), Restrictions.and(Restrictions.eq(alias+".innerValue",isInner), Restrictions.gt(alias+".timeValue", dateValue)))); }else{ String stringValue=ValueTypeList.get(i).getValue(); criteria.add(Restrictions.and(Restrictions.eq(alias+".qName", qName), Restrictions.and(Restrictions.eq(alias+".innerValue",isInner), Restrictions.eq(alias+".stringValue", stringValue)))); } } }catch(Exception e ){ Configuration.logger.log(null, e.getMessage()); } } public static void extensionHierarchCriteria_LT(Criteria criteria, List<PairType> ValueTypeList, String qName, String alias, int isInner){ try{ for(int i=0; i<ValueTypeList.size(); i++){ String dataType=ValueTypeList.get(i).getType(); if(dataType.equals("int")){ int intValue=Integer.parseInt(ValueTypeList.get(i).getValue()); criteria.add(Restrictions.and(Restrictions.eq(alias+".qName", qName), Restrictions.and(Restrictions.eq(alias+".innerValue",isInner), Restrictions.lt(alias+".intValue", intValue)))); }else if(dataType.equals("float")){ float floatValue=Float.parseFloat(ValueTypeList.get(i).getValue()); criteria.add(Restrictions.and(Restrictions.eq(alias+".qName", qName), Restrictions.and(Restrictions.eq(alias+".innerValue",isInner), Restrictions.lt(alias+".floatValue", floatValue)))); }else if(dataType.equals("dateTime")){ Date dateValue=WriteUtility.getDateTimeAny(ValueTypeList.get(i).getValue()); criteria.add(Restrictions.and(Restrictions.eq(alias+".qName", qName), Restrictions.and(Restrictions.eq(alias+".innerValue",isInner), Restrictions.lt(alias+".timeValue", dateValue)))); }else{ String stringValue=ValueTypeList.get(i).getValue(); criteria.add(Restrictions.and(Restrictions.eq(alias+".qName", qName), Restrictions.and(Restrictions.eq(alias+".innerValue",isInner), Restrictions.eq(alias+".stringValue", stringValue)))); } } }catch(Exception e ){ Configuration.logger.log(null, e.getMessage()); } } public static void extensionHierarchCriteria_GE(Criteria criteria, List<PairType> ValueTypeList, String qName, String alias, int isInner){ try{ for(int i=0; i<ValueTypeList.size(); i++){ String dataType=ValueTypeList.get(i).getType(); if(dataType.equals("int")){ int intValue=Integer.parseInt(ValueTypeList.get(i).getValue()); criteria.add(Restrictions.and(Restrictions.eq(alias+".qName", qName), Restrictions.and(Restrictions.eq(alias+".innerValue",isInner), Restrictions.ge(alias+".intValue", intValue)))); }else if(dataType.equals("float")){ float floatValue=Float.parseFloat(ValueTypeList.get(i).getValue()); criteria.add(Restrictions.and(Restrictions.eq(alias+".qName", qName), Restrictions.and(Restrictions.eq(alias+".innerValue",isInner), Restrictions.ge(alias+".floatValue", floatValue)))); }else if(dataType.equals("dateTime")){ Date dateValue=WriteUtility.getDateTimeAny(ValueTypeList.get(i).getValue()); criteria.add(Restrictions.and(Restrictions.eq(alias+".qName", qName), Restrictions.and(Restrictions.eq(alias+".innerValue",isInner), Restrictions.ge(alias+".timeValue", dateValue)))); }else{ String stringValue=ValueTypeList.get(i).getValue(); criteria.add(Restrictions.and(Restrictions.eq(alias+".qName", qName), Restrictions.and(Restrictions.eq(alias+".innerValue",isInner), Restrictions.eq(alias+".stringValue", stringValue)))); } } }catch(Exception e ){ Configuration.logger.log(null, e.getMessage()); } } public static void extensionHierarchCriteria_LE(Criteria criteria, List<PairType> ValueTypeList, String qName, String alias, int isInner){ try{ for(int i=0; i<ValueTypeList.size(); i++){ String dataType=ValueTypeList.get(i).getType(); if(dataType.equals("int")){ int intValue=Integer.parseInt(ValueTypeList.get(i).getValue()); criteria.add(Restrictions.and(Restrictions.eq(alias+".qName", qName), Restrictions.and(Restrictions.eq(alias+".innerValue",isInner), Restrictions.le(alias+".intValue", intValue)))); }else if(dataType.equals("float")){ float floatValue=Float.parseFloat(ValueTypeList.get(i).getValue()); criteria.add(Restrictions.and(Restrictions.eq(alias+".qName", qName), Restrictions.and(Restrictions.eq(alias+".innerValue",isInner), Restrictions.le(alias+".floatValue", floatValue)))); }else if(dataType.equals("dateTime")){ Date dateValue=WriteUtility.getDateTimeAny(ValueTypeList.get(i).getValue()); criteria.add(Restrictions.and(Restrictions.eq(alias+".qName", qName), Restrictions.and(Restrictions.eq(alias+".innerValue",isInner), Restrictions.le(alias+".timeValue", dateValue)))); }else{ String stringValue=ValueTypeList.get(i).getValue(); criteria.add(Restrictions.and(Restrictions.eq(alias+".qName", qName), Restrictions.and(Restrictions.eq(alias+".innerValue",isInner), Restrictions.eq(alias+".stringValue", stringValue)))); } } }catch(Exception e ){ Configuration.logger.log(null, e.getMessage()); } } }