14 package cz.vutbr.fit.knot.annotations.web;
 
   24 import java.io.IOException;
 
   25 import java.io.Serializable;
 
   26 import java.io.StringReader;
 
   27 import java.io.StringWriter;
 
   28 import java.util.ArrayList;
 
   29 import java.util.Iterator;
 
   30 import java.util.List;
 
   31 import javax.faces.bean.ManagedBean;
 
   32 import javax.faces.bean.ViewScoped;
 
   33 import javax.persistence.EntityManager;
 
   34 import javax.persistence.EntityTransaction;
 
   35 import javax.persistence.Query;
 
   36 import javax.xml.parsers.DocumentBuilder;
 
   37 import javax.xml.parsers.DocumentBuilderFactory;
 
   38 import javax.xml.parsers.ParserConfigurationException;
 
   39 import org.apache.commons.io.IOUtils;
 
   40 import org.apache.myfaces.custom.fileupload.UploadedFile;
 
   41 import org.w3c.dom.Document;
 
   42 import org.w3c.dom.Element;
 
   43 import org.w3c.dom.NodeList;
 
   44 import org.xml.sax.InputSource;
 
   45 import org.xml.sax.SAXException;
 
   89       errorMessage = MessageProvider.getMessage(
"groupMustBeSet");
 
   93     Object[] params = 
new Object[2];  
 
   96     List gList = AppBean.getPersistenceManager().queryDB(
"UserGroup.findByName", params);
 
   98     if (gList != null && !gList.isEmpty()) {  
 
  101       errorMessage = MessageProvider.getMessage(
"unknownGroup");
 
  111     StringWriter fWriter = 
new StringWriter();
 
  113       IOUtils.copy(uploadedFile.getInputStream(), fWriter);
 
  114     } 
catch (IOException ex) {
 
  115       errorMessage = MessageProvider.getMessage(
"uploadingError");
 
  120     Document changesDoc = 
parseXml(fWriter.toString());
 
  121     Element docEl = changesDoc.getDocumentElement();
 
  123     List<AnnotType> affectedTypes = 
new ArrayList<AnnotType>();
 
  125     NodeList changeNodes = docEl.getElementsByTagName(
"change");
 
  126     int changesCnt = changeNodes.getLength();
 
  127     for (
int i = 0; i < changesCnt; i++) {  
 
  128       Element changeEl = (Element) changeNodes.item(i);
 
  129       String uri = changeEl.getAttribute(
"uri");
 
  130       if (uri == null || uri.isEmpty()) {
 
  136       String name = changeEl.getAttribute(
"newName");
 
  137       if (name != null && name.isEmpty()) {
 
  142       String comment = null;
 
  143       NodeList commentNL = changeEl.getElementsByTagName(
"comment");
 
  144       if (commentNL.getLength() != 0) {  
 
  145         Element commentEl = (Element) commentNL.item(0);
 
  147         while (commentEl.getParentNode() != changeEl && k < commentNL.getLength()) {
 
  149           commentEl = (Element) commentNL.item(k);  
 
  152         if (commentEl.getParentNode() == changeEl) {  
 
  153           comment = MessageProcessor.getElementContent(commentEl);
 
  160       if (changedTypes.isEmpty()) {
 
  165       for (Iterator<AnnotType> chTIt = changedTypes.iterator(); chTIt.hasNext();) {
 
  171           params[1] = chType.getId();
 
  172           List aList = AppBean.getPersistenceManager().queryDB(
"Annotation.findByType", params);
 
  173           if (aList != null && !aList.isEmpty()) {  
 
  175                                         + 
" (" + chType.
getUri() + 
")<br/>";
 
  180         affectedTypes.add(chType);  
 
  182           boolean someChange = 
true;
 
  185             List<AnnotType> nowAdd = 
new ArrayList<AnnotType>();
 
  186             for (Iterator<AnnotType> afIt = affectedTypes.iterator(); afIt.hasNext();) {  
 
  189               params[0] = 
"ancestor";
 
  190               params[1] = afT.getId();
 
  192               @SuppressWarnings(
"unchecked")
 
  193               List<AnnotType> tList = AppBean.getPersistenceManager().queryDB(
"AnnotType.findByAncestor", params);
 
  194               if (tList != null && !tList.isEmpty()) {  
 
  195                 for (Iterator<AnnotType> tIt = tList.iterator(); tIt.hasNext();) {
 
  197                   if (!affectedTypes.contains(t) && !nowAdd.contains(t)) {
 
  204             affectedTypes.addAll(nowAdd);
 
  207           chType.setName(name);
 
  212         if (comment != null) {
 
  213           chType.setComment(comment);
 
  217         NodeList attrNodes = changeEl.getElementsByTagName(
"attribute");
 
  218         int attrCnt = attrNodes.getLength();
 
  219         for (
int j = 0; j < attrCnt; j++) {  
 
  220           Element attrEl = (Element) attrNodes.item(j);
 
  221           String aName = attrEl.getAttribute(
"name");
 
  222           if (aName == null || aName.isEmpty()) {
 
  228           for (Iterator<AnnotTypeAttr> attrIt = chType.
getAttributes().iterator(); attrIt.hasNext();) {
 
  230             if (aTA.
getName().equals(aName)) {
 
  235           if (chAttr == null) {
 
  237                                         + 
": " + aName + 
"<br/>";
 
  242           String newAttrName = attrEl.getAttribute(
"newName");
 
  243           if (newAttrName != null && newAttrName.isEmpty()) {
 
  248           if (newAttrName != null) {
 
  249             chAttr.setName(newAttrName);
 
  253           String attrComment = null;
 
  254           NodeList aCNL = attrEl.getElementsByTagName(
"comment");
 
  255           if (aCNL.getLength() != 0) {
 
  256             Element aCEl = (Element) aCNL.item(0);
 
  257             attrComment = MessageProcessor.getElementContent(aCEl);
 
  261           if (attrComment != null) {
 
  262             chAttr.setComment(attrComment);
 
  270     for (Iterator<AnnotType> aTIt = affectedTypes.iterator(); aTIt.hasNext();) {
 
  272       ArrayList<String> nList = 
new ArrayList<String>();
 
  273       for (Iterator<AnnotTypeAttr> aTAIt = aType.
getAttributes().iterator(); aTAIt.hasNext();) {
 
  275         if (!nList.contains(aTA.
getName())) {
 
  276           nList.add(aTA.getName());
 
  280                          + 
": " + aTA.getName() + 
"<br/>";
 
  288     EntityManager em = AppBean.getPersistenceManager().getEM();
 
  289     EntityTransaction transaction = em.getTransaction();
 
  290     boolean errorOccurred = 
false;
 
  294       List<AnnotType> sTypes = 
new ArrayList<AnnotType>();  
 
  296       for (Iterator<AnnotType> aTIt = affectedTypes.iterator(); aTIt.hasNext();) {  
 
  301         sType.setName(aType.getName());
 
  302         sType.setComment(aType.getComment());
 
  304         for (Iterator<AnnotTypeAttr> aTAIt = sType.getAttributes().iterator(); aTAIt.hasNext();) {
 
  307           for (Iterator<AnnotTypeAttr> nATAIt = aType.
getAttributes().iterator(); nATAIt.hasNext();) {
 
  309             if (aTA.
getId() == nATA.getId()) {
 
  310               aTA.setName(nATA.getName());
 
  311               aTA.setComment(nATA.getComment());
 
  318       for (Iterator<AnnotType> sTIt = sTypes.iterator(); sTIt.hasNext();) {
 
  320         sType.setUri(sType.getGeneratedURI());  
 
  324       for (Iterator<AnnotType> sTIt = sTypes.iterator(); sTIt.hasNext();) {
 
  328         params[1] = type.getUri();
 
  329         Query q = em.createNamedQuery(
"AnnotType.findByUri");
 
  330         for (
int p = 0; p < params.length; p = p + 2) {
 
  331           q.setParameter((String) params[p], params[p + 1]);
 
  333         List tList = q.getResultList();
 
  334         if (tList != null && !tList.isEmpty()) {  
 
  335           if (tList.size() > 1) {  
 
  338                            + 
": " + type.getUri() + 
"<br/>";
 
  339             throw new RuntimeException(
"Duplicit URIs found!");
 
  342           throw new RuntimeException(
"Some type was not found!");
 
  347       transaction.commit();
 
  348     } 
catch (Exception e) {
 
  349       transaction.rollback();
 
  359     for (Iterator<AnnotType> aTIt = affectedTypes.iterator(); aTIt.hasNext();) {
 
  361       aType.setUri(aType.getGeneratedURI());  
 
  366     Iterator<EditorSession> sesIt = AppBean.getSessions().iterator();
 
  367     synchronized(AppBean.getSessions()){
 
  368       while (sesIt.hasNext()) {  
 
  372         for (Iterator<AnnotType> atIt = affectedTypes.iterator(); atIt.hasNext();) {
 
  374           flier.AddEditedType(at);
 
  376         es.addMessageTS(rc.createCometResponse(flier, es));  
 
  381     successMessage = MessageProvider.getMessage(
"uploadSuccessfull") + 
"<br/>" 
  395     if (!uriPattern.contains(
"*") && uriPattern.contains(AppBean.getBaseTypeUri())) {
 
  398     } 
else if (uriPattern.contains(
"*") && uriPattern.contains(AppBean.getBaseTypeUri())) {
 
  401       uriPattern = uriPattern.replace(
"*", 
"%");
 
  404     } 
else if (!uriPattern.contains(
"*")) {
 
  407       uriPattern = MessageProcessor.replaceArrows(uriPattern);
 
  410         uriPattern = AppBean.getBaseTypeUri() + uriPattern;
 
  415         String uriPatternWG = AppBean.getBaseTypeUri() + 
"g" + userGroup.
getId() + 
"/" + uriPattern;
 
  421       uriPattern = uriPattern.replace(
"*", 
"%");
 
  422       uriPattern = MessageProcessor.replaceArrows(uriPattern);
 
  425         uriPattern = AppBean.getBaseTypeUri() + uriPattern;
 
  430         String uriPatternWG = AppBean.getBaseTypeUri() + 
"g" + userGroup.
getId() + 
"/" + uriPattern;
 
  445     Object[] params = 
new Object[2];
 
  449     @SuppressWarnings(
"unchecked")
 
  450     List<AnnotType> tList = AppBean.getPersistenceManager().queryDB(
"AnnotType.findByUri", params);
 
  451     if (tList != null && !tList.isEmpty()) {  
 
  454     return new ArrayList<AnnotType>();  
 
  464   @SuppressWarnings(
"unchecked")
 
  468     EntityManager em = AppBean.getPersistenceManager().getEM();
 
  470       Query query = em.createQuery(
"SELECT a FROM AnnotType a WHERE a.uri LIKE '" + uriPattern + 
"'");
 
  471       tList = query.getResultList();
 
  472     } 
catch (Exception e) {
 
  478     if (tList != null && !tList.isEmpty()) {  
 
  481     return new ArrayList<AnnotType>();  
 
  495     Object[] params = 
new Object[2];
 
  498     Query q = em.createNamedQuery(
"AnnotType.findByUri");
 
  499     for (
int p = 0; p < params.length; p = p + 2) {
 
  500       q.setParameter((String) params[p], params[p + 1]);
 
  502     List aList = q.getResultList();
 
  503     if (aList != null && !aList.isEmpty()) {  
 
  506       throw new RuntimeException(
"New type not found!");
 
  598   private static Document 
parseXml(String XMLString) {
 
  600     DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
 
  601     dbf.setNamespaceAware(
true);
 
  604       DocumentBuilder db = dbf.newDocumentBuilder();
 
  605       InputSource is = 
new InputSource();
 
  606       is.setCharacterStream(
new StringReader(XMLString));
 
  608     } 
catch (ParserConfigurationException pce) {
 
  610     } 
catch (SAXException se) {
 
  612     } 
catch (IOException ioe) {
 
List< AnnotTypeAttr > getAttributes()
static boolean isGroupIncluded(String gStr)
void setErrorMessage(String errorMessage)
void setuGroup(String uGroup)
Class representing attribute of type of annotation. 
Singleton for storing global variables. 
Class for getting localized messages from message bundle. 
void setSuccessMessage(String successMessage)
UploadedFile uploadedFile
Backbean for page for batch renaming of types of annotations. 
void setUploadedFile(UploadedFile uploadedFile)
Static class which parses and process XML with messages. 
Class representing user group. 
List< AnnotType > getChangedTypesLike(String uriPattern)
static String getMessage(String name)
Class representing type of annotation. 
Flier with informations for comet handlers. 
List< AnnotType > getChangedTypeExact(String uri)
Class that creates responses and persists data. 
List< AnnotType > getChangedTypes(String uriPattern, UserGroup userGroup)
String getSuccessMessage()
Informations about client session. 
UploadedFile getUploadedFile()
static Document parseXml(String XMLString)
static AnnotType queryType(String uri, EntityManager em)