KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > openharmonise > him > editors > report > ReportEditor


1 /*
2  * The contents of this file are subject to the
3  * Mozilla Public License Version 1.1 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at http://www.mozilla.org/MPL/
6  *
7  * Software distributed under the License is distributed on an "AS IS"
8  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
9  * See the License for the specific language governing rights and
10  * limitations under the License.
11  *
12  * The Initial Developer of the Original Code is Simulacra Media Ltd.
13  * Portions created by Simulacra Media Ltd are Copyright (C) Simulacra Media Ltd, 2004.
14  *
15  * All Rights Reserved.
16  *
17  * Contributor(s):
18  */

19 package org.openharmonise.him.editors.report;
20
21 import java.awt.*;
22 import java.awt.event.*;
23 import java.net.*;
24 import java.rmi.*;
25 import java.util.*;
26 import java.util.List JavaDoc;
27
28 import javax.swing.*;
29 import javax.xml.parsers.*;
30 import javax.xml.rpc.*;
31
32 import org.jaxen.*;
33 import org.jaxen.dom.*;
34 import org.openharmonise.him.*;
35 import org.openharmonise.him.editors.report.rqom.*;
36 import org.openharmonise.him.editors.report.utils.*;
37 import org.openharmonise.him.harmonise.*;
38 import org.openharmonise.him.reports.*;
39 import org.openharmonise.vfs.*;
40 import org.openharmonise.vfs.authentication.*;
41 import org.openharmonise.vfs.context.*;
42 import org.openharmonise.vfs.metadata.*;
43 import org.openharmonise.vfs.metadata.range.*;
44 import org.openharmonise.vfs.servers.*;
45 import org.w3c.dom.*;
46
47
48 /**
49  * Dialog to editor system reports.
50  *
51  * @author Matthew Large
52  * @version $Revision: 1.2 $
53  *
54  */

55 public class ReportEditor extends JDialog implements LayoutManager, ActionListener, ContextListener, ReportQueryListener {
56
57     /**
58      * XML element name for property instance values.
59      */

60     private static final String JavaDoc TAG_PROPERTYINSTANCE_VALUES = "PropertyInstanceValues";
61
62     /**
63      * XML element name for properties.
64      */

65     private static final String JavaDoc TAG_PROPERTY = "Property";
66
67     /**
68      * XML element name for property instances.
69      */

70     private static final String JavaDoc TAG_PROPERTYINSTANCE = "PropertyInstance";
71
72     /**
73      * XML attribute name for operators.
74      */

75     private static final String JavaDoc ATTRIB_OPERATOR = "operator";
76
77     /**
78      * XML element name for paths.
79      */

80     private static final String JavaDoc TAG_PATH = "Path";
81
82     /**
83      * XML element name for workflow stages.
84      */

85     private static final String JavaDoc TAG_WORKFLOW_STAGE = "WorkflowStage";
86     
87     private static final String JavaDoc TAG_OBJECT_ATTRIBUTES = "ObjectAttributes";
88     
89     private static final String JavaDoc TAG_METADATA = "Metadata";
90
91     /**
92      * XML element name for workflow property instance values.
93      */

94     private static final String JavaDoc TAG_WORKFLOW_PROPERTYINSTANCE_VALUES = TAG_PROPERTYINSTANCE_VALUES; //"WorkflowPropertyInstanceValues";
95

96     /**
97      * XML element name for workflow properties.
98      */

99     private static final String JavaDoc TAG_WORKFLOW_PROPERTY = TAG_PROPERTY; //"WorkflowProperty";
100

101     /**
102      * XML element name for workflow property instances.
103      */

104     private static final String JavaDoc TAG_WORKFLOW_PROPERTYINSTANCE = TAG_PROPERTYINSTANCE; //"WorkflowPropertyInstance";
105

106     /**
107      * OK button.
108      */

109     private JButton m_buttonOK = null;
110     
111     /**
112      * Cancel button.
113      */

114     private JButton m_buttonCancel = null;
115     
116     /**
117      * Run button.
118      */

119     private JButton m_buttonRun = null;
120     
121     /**
122      * Main layout panel.
123      */

124     private JPanel m_panel = null;
125     
126     /**
127      * Report query.
128      */

129     private ReportQuery m_reportQuery = null;
130     
131     /**
132      * Full path to virtual file for report query.
133      */

134     private String JavaDoc m_sReportPath = null;
135     
136     /**
137      * true to show the main report panel.
138      */

139     private boolean m_bShowQueryPanel = true;
140     
141     /**
142      * Label for dialog.
143      */

144     private JLabel m_label = null;
145     
146     private ReportPanel m_reportPanel = null;
147     
148     static private HashMap m_sysPropMappings;
149     static{
150         m_sysPropMappings = new HashMap();
151         m_sysPropMappings.put("display_name",HarmonisePaths.PATH_SYSTEM_PROPS + "/title");
152         m_sysPropMappings.put("summary",HarmonisePaths.PATH_SYSTEM_PROPS + "/description");
153     }
154     
155     /**
156      * Constructs a new report editor.
157      *
158      * @param sReportPath Full path to report query
159      * @throws HeadlessException
160      */

161     public ReportEditor(String JavaDoc sReportPath) throws HeadlessException {
162         super();
163         this.m_sReportPath = sReportPath;
164         this.setTitle("Report Builder");
165         this.setModal(true);
166         this.m_reportQuery = new ReportQuery();
167         this.setup();
168     }
169     
170     /**
171      * Constructs a new report editor.
172      *
173      * @param sReportPath Full path to report query
174      * @param xml Report query XML
175      * @throws HeadlessException
176      */

177     public ReportEditor(String JavaDoc sReportPath, Document xml) throws HeadlessException {
178         super();
179         this.m_sReportPath = sReportPath;
180         this.setTitle("Report Builder");
181         this.setModal(true);
182         this.setQuery(xml);
183         this.setup();
184     }
185     
186     /**
187      * Configures this dialog.
188      *
189      */

190     private void setup() {
191         
192         if(this.m_sReportPath.equalsIgnoreCase("/webdav/Reports/queries/LinkChecker")) {
193             this.m_bShowQueryPanel=false;
194             this.setTitle("Link checker");
195         }
196         
197         ContextHandler.getInstance().addListener(ContextType.CONTEXT_APP_FOCUS, this);
198             
199         this.setResizable(false);
200         
201         this.getContentPane().setLayout(this);
202         
203         if(this.m_bShowQueryPanel) {
204             this.setSize(640,520);
205         } else {
206             this.setSize(550,100);
207         }
208         int x = this.getGraphicsConfiguration().getBounds().width/2-this.getSize().width/2;
209         int y = this.getGraphicsConfiguration().getBounds().height/2-this.getSize().height/2;
210         
211         this.setLocation(x, y);
212
213         String JavaDoc fontName = "Dialog";
214         int fontSize = 11;
215         Font font = new Font(fontName, Font.PLAIN, fontSize);
216         this.getContentPane().setBackground(new Color(224,224,224));
217         
218         if(this.m_bShowQueryPanel) {
219             this.m_label = new JLabel("Select from the options below to define the resource properties used in the report");
220         } else {
221             this.m_label = new JLabel("Select 'Run' to run the link checking report");
222         }
223         this.getContentPane().add(this.m_label);
224         
225
226         if(this.m_bShowQueryPanel) {
227             this.m_buttonOK = new JButton("OK");
228             this.m_buttonOK.setActionCommand("OK");
229             this.m_buttonOK.addActionListener(this);
230             this.m_buttonOK.setFont(font);
231             this.getContentPane().add(this.m_buttonOK);
232         }
233     
234             this.m_buttonCancel = new JButton("Cancel");
235             this.m_buttonCancel.setActionCommand("CANCEL");
236             this.m_buttonCancel.addActionListener(this);
237             this.m_buttonCancel.setFont(font);
238             this.getContentPane().add(this.m_buttonCancel);
239
240         this.m_buttonRun = new JButton("Run");
241         this.m_buttonRun.setActionCommand("RUN");
242         this.m_buttonRun.addActionListener(this);
243         this.m_buttonRun.setFont(font);
244         this.getContentPane().add(this.m_buttonRun);
245         
246         VirtualFile vfReportFile = ServerList.getInstance().getHarmoniseServer().getVFS().getVirtualFile(this.m_sReportPath).getResource();
247         
248         if(vfReportFile!=null && (vfReportFile.getState()!=VirtualFile.STATE_LIVE || (vfReportFile.isVersionable() && ((VersionedVirtualFile)vfReportFile).getPendingVersionPath()!=null) )) {
249             this.m_buttonRun.setEnabled(false);
250         }
251
252         if(this.m_bShowQueryPanel) {
253             m_panel = new JPanel();
254             m_panel.setLayout(new BorderLayout());
255             m_reportPanel = new ReportPanel(this.m_reportQuery);
256             JScrollPane scroller = new JScrollPane(m_reportPanel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
257             scroller.getVerticalScrollBar().setUnitIncrement(20);
258             this.m_panel.add(scroller);
259             this.getContentPane().add(this.m_panel);
260             this.m_reportQuery.addListener(this);
261         } else {
262             this.m_reportQuery=null;
263         }
264         
265             
266     }
267
268     /* (non-Javadoc)
269      * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
270      */

271     public void actionPerformed(ActionEvent ae) {
272         if(ae.getActionCommand().equals("OK")) {
273             ContextHandler.getInstance().removeListener(ContextType.CONTEXT_APP_FOCUS, this);
274             this.hide();
275         } else if(ae.getActionCommand().equals("CANCEL")) {
276             ContextHandler.getInstance().removeListener(ContextType.CONTEXT_APP_FOCUS, this);
277             this.m_reportQuery=null;
278             this.hide();
279         } else if(ae.getActionCommand().equals("RUN")) {
280             
281             Server server = null;
282             server = ServerList.getInstance().getHarmoniseServer();
283             URI uri = server.getURI();
284         
285             String JavaDoc sURI = uri.getScheme() + "://" + uri.getHost() + ":" + uri.getPort() + "/webdav/services/ReportService";
286             URL url = null;
287             try {
288                 url = new URL(sURI);
289             } catch (MalformedURLException e2) {
290                 e2.printStackTrace();
291                 System.exit(1);
292             }
293         
294             AuthInfo auth = server.getVFS().getAuthentication();
295             
296             try {
297                 String JavaDoc sOutputPath = ReportServiceClient.executeQuery(url, this.m_sReportPath, auth.getUsername(), auth.getPassword());
298                 VirtualFile vfReportOutput = server.getVFS().getVirtualFile(sOutputPath).getResource();
299                 if(vfReportOutput!=null) {
300                     server.getVFS().getVirtualFile(vfReportOutput.getFilePath()).getResource().refreshChildren();
301                 }
302             } catch (RemoteException e) {
303                 e.printStackTrace();
304             } catch (ServiceException e) {
305                 e.printStackTrace();
306             }
307             ContextHandler.getInstance().removeListener(ContextType.CONTEXT_APP_FOCUS, this);
308             this.m_reportQuery=null;
309             this.hide();
310         }
311     }
312
313     /* (non-Javadoc)
314      * @see java.awt.LayoutManager#layoutContainer(java.awt.Container)
315      */

316     public void layoutContainer(Container arg0) {
317         this.m_label.setSize(this.m_label.getPreferredSize());
318         this.m_label.setLocation(5, 3);
319         
320         if(this.m_bShowQueryPanel) {
321             this.m_panel.setSize(this.getSize().width-10, this.getHeight()-80);
322             this.m_panel.setLocation(0, 20);
323         
324             this.m_buttonOK.setSize(70, 20);
325             this.m_buttonOK.setLocation(this.getWidth()-280, this.getHeight()-50);
326         }
327         
328         this.m_buttonCancel.setSize(70, 20);
329         this.m_buttonCancel.setLocation(this.getWidth()-190, this.getHeight()-50);
330         
331         this.m_buttonRun.setSize(70, 20);
332         this.m_buttonRun.setLocation(this.getWidth()-100, this.getHeight()-50);
333     }
334
335     /**
336      * @param arg0
337      * @throws java.awt.HeadlessException
338      */

339     private ReportEditor(Dialog arg0) throws HeadlessException {
340         super(arg0);
341     }
342
343     /**
344      * @param arg0
345      * @param arg1
346      * @throws java.awt.HeadlessException
347      */

348     private ReportEditor(Dialog arg0, boolean arg1) throws HeadlessException {
349         super(arg0, arg1);
350     }
351
352     /**
353      * @param arg0
354      * @throws java.awt.HeadlessException
355      */

356     private ReportEditor(Frame arg0) throws HeadlessException {
357         super(arg0);
358     }
359
360     /**
361      * @param arg0
362      * @param arg1
363      * @throws java.awt.HeadlessException
364      */

365     private ReportEditor(Frame arg0, boolean arg1) throws HeadlessException {
366         super(arg0, arg1);
367     }
368
369     /**
370      * @param arg0
371      * @param arg1
372      * @throws java.awt.HeadlessException
373      */

374     private ReportEditor(Dialog arg0, String JavaDoc arg1) throws HeadlessException {
375         super(arg0, arg1);
376     }
377
378     /**
379      * @param arg0
380      * @param arg1
381      * @param arg2
382      * @throws java.awt.HeadlessException
383      */

384     private ReportEditor(Dialog arg0, String JavaDoc arg1, boolean arg2)
385         throws HeadlessException {
386         super(arg0, arg1, arg2);
387     }
388
389     /**
390      * @param arg0
391      * @param arg1
392      * @throws java.awt.HeadlessException
393      */

394     private ReportEditor(Frame arg0, String JavaDoc arg1) throws HeadlessException {
395         super(arg0, arg1);
396     }
397
398     /**
399      * @param arg0
400      * @param arg1
401      * @param arg2
402      * @throws java.awt.HeadlessException
403      */

404     private ReportEditor(Frame arg0, String JavaDoc arg1, boolean arg2)
405         throws HeadlessException {
406         super(arg0, arg1, arg2);
407     }
408
409     /**
410      * @param arg0
411      * @param arg1
412      * @param arg2
413      * @param arg3
414      * @throws java.awt.HeadlessException
415      */

416     private ReportEditor(
417         Dialog arg0,
418         String JavaDoc arg1,
419         boolean arg2,
420         GraphicsConfiguration arg3)
421         throws HeadlessException {
422         super(arg0, arg1, arg2, arg3);
423     }
424
425     /**
426      * @param arg0
427      * @param arg1
428      * @param arg2
429      * @param arg3
430      */

431     private ReportEditor(
432         Frame arg0,
433         String JavaDoc arg1,
434         boolean arg2,
435         GraphicsConfiguration arg3) {
436         super(arg0, arg1, arg2, arg3);
437     }
438
439     /* (non-Javadoc)
440      * @see java.awt.LayoutManager#removeLayoutComponent(java.awt.Component)
441      */

442     public void removeLayoutComponent(Component arg0) {
443     }
444
445     /* (non-Javadoc)
446      * @see java.awt.LayoutManager#addLayoutComponent(java.lang.String, java.awt.Component)
447      */

448     public void addLayoutComponent(String JavaDoc arg0, Component arg1) {
449     }
450
451     /* (non-Javadoc)
452      * @see java.awt.LayoutManager#minimumLayoutSize(java.awt.Container)
453      */

454     public Dimension minimumLayoutSize(Container arg0) {
455         return this.getSize();
456     }
457
458     /* (non-Javadoc)
459      * @see java.awt.LayoutManager#preferredLayoutSize(java.awt.Container)
460      */

461     public Dimension preferredLayoutSize(Container arg0) {
462         return this.getSize();
463     }
464
465     /* (non-Javadoc)
466      * @see com.simulacramedia.contentmanager.context.ContextListener#contextMessage(com.simulacramedia.contentmanager.context.ContextEvent)
467      */

468     public void contextMessage(ContextEvent ce) {
469         if(ce.CONTEXT_TYPE==ContextType.CONTEXT_APP_FOCUS) {
470             this.toFront();
471         }
472     }
473     
474     /**
475      * Sets the report query data.
476      *
477      * @param xml Report query XML
478      */

479     public void setQuery(Document xml) {
480         this.m_reportQuery = new ReportQuery();
481         
482         Element elRoot = xml.getDocumentElement();
483         
484         try {
485             DOMXPath xpGroups = new DOMXPath("descendant::Group[parent::Conditions]");
486             List JavaDoc groupEls = xpGroups.selectNodes(elRoot);
487             
488
489             DOMXPath xpPath = new DOMXPath("descendant::Path/.");
490             Iterator itor = groupEls.iterator();
491             while (itor.hasNext()) {
492                 Element element = (Element) itor.next();
493                 this.m_reportQuery.setPath(xpPath.stringValueOf(element));
494             }
495             
496             StringBuffer JavaDoc strbuf = new StringBuffer JavaDoc();
497             
498             strbuf.append("descendant::").append(TAG_PROPERTYINSTANCE);
499             
500             DOMXPath xpProps = new DOMXPath(strbuf.toString());
501             
502             strbuf.setLength(0);
503             
504             String JavaDoc sChildAxis = "child::";
505             strbuf.append(sChildAxis).append(TAG_PROPERTY).append("/child::Path/.");
506             
507             DOMXPath xpPropPath = new DOMXPath(strbuf.toString());
508             
509             strbuf.setLength(0);
510             
511             strbuf.append(sChildAxis).append(TAG_PROPERTYINSTANCE_VALUES).append("/descendant::Data/.");
512             
513             DOMXPath xpValueData = new DOMXPath(strbuf.toString());
514             
515             strbuf.setLength(0);
516             
517             strbuf.append(sChildAxis).append(TAG_PROPERTYINSTANCE_VALUES).append("/descendant::Path/.");
518             
519             DOMXPath xpValuePath = new DOMXPath(strbuf.toString());
520             List JavaDoc propEls = xpProps.selectNodes(elRoot);
521             itor = propEls.iterator();
522             while (itor.hasNext()) {
523                 Element element = (Element) itor.next();
524                 String JavaDoc sPropPath = xpPropPath.stringValueOf(element);
525                 
526                 String JavaDoc sPropVal = xpValueData.stringValueOf(element);
527                 if(sPropVal.equals("")) {
528                     sPropVal = xpValuePath.stringValueOf(element);
529                 }
530                 String JavaDoc sOperator = element.getAttribute(ATTRIB_OPERATOR);
531             
532                 if(sPropPath.startsWith(HarmonisePaths.PATH_WORKFLOW_PROPS)) {
533                     WorkflowStage stage = new WorkflowStage(sPropPath,this.m_reportQuery);
534                     stage.setStagePath(sPropVal);
535                     if(sOperator!=null && sOperator.length()>0){
536                         if(sOperator.equals("=")){
537                             stage.setCompleted(true);
538                         } else {
539                             stage.setCompleted(false);
540                         }
541                     }
542                     this.m_reportQuery.addWorkflowStage(stage);
543                 } else {
544                     Metadata metadata = new Metadata(sPropPath,this.m_reportQuery);
545                     metadata.setValue(sPropVal);
546                     if(sOperator.equals("<>")){
547                         metadata.setOperator("NOT");
548                     } else {
549                         metadata.setOperator(sOperator);
550                     }
551                     
552                     this.m_reportQuery.addMetadata(metadata);
553                 }
554             }
555             String JavaDoc sReportAtt = "descendant::ReportAttributes/";
556             DOMXPath xpObjectAttributes = new DOMXPath(sReportAtt + "ObjectAttributes/child::*");
557             List JavaDoc objectAttEls = xpObjectAttributes.selectNodes(elRoot);
558             Iterator iter = objectAttEls.iterator();
559             while (iter.hasNext()) {
560                 Element element = (Element) iter.next();
561                 String JavaDoc sObject = element.getTagName();
562                 String JavaDoc sSysProp = (String JavaDoc)m_sysPropMappings.get(sObject);
563                 Metadata metadata = new Metadata(sSysProp,this.m_reportQuery);
564                 m_reportQuery.addDisplayAttributes(metadata);
565             }
566             DOMXPath xpMetadata = new DOMXPath(sReportAtt + "Metadata/Property");
567             propEls = xpMetadata.selectNodes(elRoot);
568             iter = propEls.iterator();
569             while (iter.hasNext()) {
570                 Element element = (Element) iter.next();
571                 String JavaDoc sPath = xpPath.stringValueOf(element);
572                 Metadata metadata = new Metadata(sPath,this.m_reportQuery);
573                 m_reportQuery.addDisplayAttributes(metadata);
574             }
575             DOMXPath xpOrderBy = new DOMXPath("descendant::ReportAttributes/OrderBy/child::*");
576             List JavaDoc orderByEls = xpOrderBy.selectNodes(elRoot);
577             iter = orderByEls.iterator();
578             while (iter.hasNext()) {
579                 Element element = (Element) iter.next();
580                 if(element.getTagName().equals(TAG_PROPERTY)){
581                     String JavaDoc sPath = xpPath.stringValueOf(element);
582                     Metadata metadata = new Metadata(sPath,this.m_reportQuery);
583                     m_reportQuery.addOrderByAttributes(metadata);
584                 } else {
585                     String JavaDoc sObject = element.getTagName();
586                     String JavaDoc sSysProp = (String JavaDoc)m_sysPropMappings.get(sObject);
587                     Metadata metadata = new Metadata(sSysProp,this.m_reportQuery);
588                     m_reportQuery.addOrderByAttributes(metadata);
589                 }
590             }
591             
592             DOMXPath xpUsers = new DOMXPath("descendant::ChangedBy/child::User");
593             DOMXPath xpUserPath = new DOMXPath("child::Path/.");
594             List JavaDoc users = xpUsers.selectNodes(elRoot);
595             itor = users.iterator();
596             while (itor.hasNext()) {
597                 Element element = (Element) itor.next();
598                 String JavaDoc sUserPath = xpUserPath.stringValueOf(element);
599                 if(sUserPath!=null) {
600                     User user = new User(sUserPath,this.m_reportQuery);
601                     this.m_reportQuery.addUser(user);
602                 }
603             }
604             
605             DOMXPath xpActivities = new DOMXPath("descendant::Activities/child::*");
606             List JavaDoc activities = xpActivities.selectNodes(elRoot);
607             itor = activities.iterator();
608             while (itor.hasNext()) {
609                 Element element = (Element) itor.next();
610                 if(element.getTagName().equals("Archived")) {
611                     this.m_reportQuery.addActivity(ReportQuery.ACTIVITY_ARCHIVE);
612                 } else if(element.getTagName().equals("Move")) {
613                     this.m_reportQuery.addActivity(ReportQuery.ACTIVITY_MOVE);
614                 } else if(element.getTagName().equals("Published")) {
615                     this.m_reportQuery.addActivity(ReportQuery.ACTIVITY_PUBLISH);
616                 } else if(element.getTagName().equals("Retrieved")) {
617                     this.m_reportQuery.addActivity(ReportQuery.ACTIVITY_RETRIEVE);
618                 } else if(element.getTagName().equals("Workflow")) {
619                     this.m_reportQuery.addActivity(ReportQuery.ACTIVITY_WORKFLOW);
620                 }
621             }
622         } catch (JaxenException e) {
623             e.printStackTrace();
624         }
625         
626
627     }
628     
629     /**
630      * Returns the report query data.
631      *
632      * @return Report query XML
633      */

634     public Document getQuery() {
635         Document xml = null;
636         
637         if(this.m_reportQuery!=null) {
638             try {
639                 xml = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
640             
641                 Element elRoot = xml.createElement("ReportQuery");
642                 xml.appendChild(elRoot);
643             
644                 Element elQuery = xml.createElement("Query");
645                 elRoot.appendChild(elQuery);
646             
647                 Element elList = xml.createElement("List");
648                 elList.setAttribute("name", "ReportList");
649                 elQuery.appendChild(elList);
650             
651                 Element elConditions = xml.createElement("Conditions");
652                 elConditions.setAttribute("name", "ReportConditions");
653                 elList.appendChild(elConditions);
654             
655                 Element elGroup = xml.createElement("Group");
656                 elGroup.setAttribute("sub", "true");
657                 elConditions.appendChild(elGroup);
658             
659                 Element elGroupObject = xml.createElement( PathTagMapping.getGroupTagName(this.m_reportQuery.getPath()) );
660                 elGroup.appendChild(elGroupObject);
661             
662                 Element elGroupPath = xml.createElement(TAG_PATH);
663                 Text txt = xml.createTextNode( this.m_reportQuery.getPath() );
664                 elGroupPath.appendChild(txt);
665                 elGroupObject.appendChild(elGroupPath);
666             
667                 Iterator itor = this.m_reportQuery.getMetadata().iterator();
668                 while (itor.hasNext()) {
669                     Metadata metadata = (Metadata) itor.next();
670                     Property prop = PropertyCache.getInstance().getPropertyByPath(metadata.getPath());
671                     String JavaDoc sValue = metadata.getValue();
672                     if(prop==null || sValue==null || sValue.length()==0) {
673                         continue;
674                     }
675                 
676                     Element elPropInst = xml.createElement(TAG_PROPERTYINSTANCE);
677                     if(metadata.getOperator().equalsIgnoreCase("NOT")){
678                         elPropInst.setAttribute(ATTRIB_OPERATOR, "<>");
679                     } else {
680                         elPropInst.setAttribute(ATTRIB_OPERATOR, metadata.getOperator());
681                     }
682                     elConditions.appendChild(elPropInst);
683                 
684                     Element elProp = xml.createElement(TAG_PROPERTY);
685                     elPropInst.appendChild(elProp);
686                     Element elPropPath = xml.createElement(TAG_PATH);
687                     txt = xml.createTextNode(metadata.getPath());
688                     elPropPath.appendChild(txt);
689                     elProp.appendChild(elPropPath);
690                 
691                     Element elPropInstVals = xml.createElement(TAG_PROPERTYINSTANCE_VALUES);
692                     elPropInst.appendChild(elPropInstVals);
693                 
694                     if(prop.getRange() instanceof ResourceRange || prop.getRange() instanceof ValueRange) {
695                         Element elObjectElement = xml.createElement( PathTagMapping.getObjectTagName(sValue) );
696                         elPropInstVals.appendChild(elObjectElement);
697                         Element elObjectPath = xml.createElement(TAG_PATH);
698                         txt = xml.createTextNode(sValue);
699                         elObjectPath.appendChild(txt);
700                         elObjectElement.appendChild(elObjectPath);
701                     } else if(prop.getRange() instanceof CollectionRange) {
702                         Element elObjectElement = xml.createElement( PathTagMapping.getGroupTagName(sValue) );
703                         elPropInstVals.appendChild(elObjectElement);
704                         Element elObjectPath = xml.createElement(TAG_PATH);
705                         txt = xml.createTextNode(sValue);
706                         elObjectPath.appendChild(txt);
707                         elObjectElement.appendChild(elObjectPath);
708                     } else {
709                         Element elValueObject = xml.createElement( "Data" );
710                         txt = xml.createTextNode(sValue);
711                         elValueObject.appendChild(txt);
712                         elPropInstVals.appendChild(elValueObject);
713                     }
714                 }
715             
716                 itor = this.m_reportQuery.getWorkflowStages().iterator();
717                 while (itor.hasNext()) {
718                     WorkflowStage workflowStage = (WorkflowStage) itor.next();
719                     String JavaDoc sPath = workflowStage.getPath();
720                     String JavaDoc sStagePath = workflowStage.getStagePath();
721                     if (sPath == null || sPath.length() == 0
722                             || sStagePath == null || sStagePath.length() == 0) {
723                         continue;
724                     }
725     
726                     Element elPropInst = xml.createElement(TAG_WORKFLOW_PROPERTYINSTANCE);
727                     if(workflowStage.isCompleted()){
728                         elPropInst.setAttribute(ATTRIB_OPERATOR, "=");
729                     } else {
730                         elPropInst.setAttribute(ATTRIB_OPERATOR, "<>");
731                     }
732                     elConditions.appendChild(elPropInst);
733     
734                     Element elProp = xml.createElement(TAG_WORKFLOW_PROPERTY);
735                     elPropInst.appendChild(elProp);
736                     Element elPropPath = xml.createElement(TAG_PATH);
737                     txt = xml.createTextNode(workflowStage.getPath());
738                     elPropPath.appendChild(txt);
739                     elProp.appendChild(elPropPath);
740     
741                     Element elPropInstVals = xml.createElement(TAG_WORKFLOW_PROPERTYINSTANCE_VALUES);
742                     elPropInst.appendChild(elPropInstVals);
743     
744                     Element elValueObject = xml.createElement(TAG_WORKFLOW_STAGE);
745                     Element elPath = xml.createElement(TAG_PATH);
746                     elValueObject.appendChild(elPath);
747                     txt = xml.createTextNode(workflowStage.getStagePath());
748                     elPath.appendChild(txt);
749                     elPropInstVals.appendChild(elValueObject);
750                 }
751                 
752                 Element elSearchObject = xml.createElement("SearchObject");
753                 elList.appendChild(elSearchObject);
754                 Element elSearchObjectElement = xml.createElement(PathTagMapping.getObjectTagName(this.m_reportQuery.getPath()));
755                 elSearchObject.appendChild(elSearchObjectElement);
756             
757                 Element elReportAttributes = xml.createElement("ReportAttributes");
758                 elQuery.appendChild(elReportAttributes);
759                 
760                 Element elMetadata = xml.createElement(TAG_METADATA);
761                 elReportAttributes.appendChild(elMetadata);
762                 
763                 itor = this.m_reportQuery.getDisplayAttributes().iterator();
764                 while (itor.hasNext()) {
765                     Metadata attribute = (Metadata) itor.next();
766                     if(attribute.isSystemProperty()){
767                         Element elObjectAttributes = xml.createElement("ObjectAttributes");
768                         elReportAttributes.appendChild(elObjectAttributes);
769                         String JavaDoc sPath = getSysPropFromMetadata(attribute);
770                         Element elSysProp = xml.createElement(sPath);
771                         elObjectAttributes.appendChild(elSysProp);
772                     } else {
773                         Element elProp = xml.createElement(TAG_PROPERTY);
774                         elMetadata.appendChild(elProp);
775         
776                         Element elPath = xml.createElement(TAG_PATH);
777                         elProp.appendChild(elPath);
778                         txt = xml.createTextNode(attribute.getPath());
779                         elPath.appendChild(txt);
780                     }
781                 }
782                 
783                 Element elOrderBy = xml.createElement("OrderBy");
784                 elReportAttributes.appendChild(elOrderBy);
785                 
786                 itor = this.m_reportQuery.getOrderByAttributes().iterator();
787                 while (itor.hasNext()) {
788                     Metadata attribute = (Metadata) itor.next();
789     
790                     if(attribute.isSystemProperty()){
791                         String JavaDoc sPath = getSysPropFromMetadata(attribute);
792                         Element elSysProp = xml.createElement(sPath);
793                         elOrderBy.appendChild(elSysProp);
794                     } else {
795                         Element elProp = xml.createElement(TAG_PROPERTY);
796                         elOrderBy.appendChild(elProp);
797         
798                         Element elPath = xml.createElement(TAG_PATH);
799                         elProp.appendChild(elPath);
800                         txt = xml.createTextNode(attribute.getPath());
801                         elPath.appendChild(txt);
802                     }
803                 }
804                 
805                 Element elEventConditions = xml.createElement("EventConditions");
806                 elQuery.appendChild(elEventConditions);
807             
808                 Element elActivityPeriod = xml.createElement("ActivityPeriod");
809                 elEventConditions.appendChild(elActivityPeriod);
810             
811                 Element elChangedBy = xml.createElement("ChangedBy");
812                 elEventConditions.appendChild(elChangedBy);
813             
814                 itor = this.m_reportQuery.getUsers().iterator();
815                 while (itor.hasNext()) {
816                     User user = (User) itor.next();
817                     Element elUser = xml.createElement("User");
818                     elChangedBy.appendChild(elUser);
819                 
820                     Element elUserPath = xml.createElement(TAG_PATH);
821                     txt = xml.createTextNode( user.getPath() );
822                     elUserPath.appendChild(txt);
823                     elUser.appendChild(elUserPath);
824                 }
825             
826                 Element elActivities = xml.createElement("Activities");
827                 elEventConditions.appendChild(elActivities);
828             
829                 itor = this.m_reportQuery.getActivities().iterator();
830                 while (itor.hasNext()) {
831                     String JavaDoc sActivity = (String JavaDoc) itor.next();
832                     if(sActivity.equals(ReportQuery.ACTIVITY_ARCHIVE)) {
833                         Element elArchived = xml.createElement("Archived");
834                         elActivities.appendChild(elArchived);
835                     } else if(sActivity.equals(ReportQuery.ACTIVITY_MOVE)) {
836                         Element elMove = xml.createElement("Move");
837                         elActivities.appendChild(elMove);
838                     } else if(sActivity.equals(ReportQuery.ACTIVITY_PUBLISH)) {
839                         Element elPublished = xml.createElement("Published");
840                         elActivities.appendChild(elPublished);
841                     } else if(sActivity.equals(ReportQuery.ACTIVITY_RETRIEVE)) {
842                         Element elRetrieved = xml.createElement("Retrieved");
843                         elActivities.appendChild(elRetrieved);
844                     } else if(sActivity.equals(ReportQuery.ACTIVITY_WORKFLOW)) {
845                         Element elWorkflow = xml.createElement("Workflow");
846                         elActivities.appendChild(elWorkflow);
847                     }
848                 }
849             } catch (ParserConfigurationException e) {
850                 e.printStackTrace();
851             } catch (FactoryConfigurationError e) {
852                 e.printStackTrace();
853             }
854         }
855         return xml;
856     }
857     private String JavaDoc getSysPropFromMetadata(Metadata metadata){
858         Iterator iter = m_sysPropMappings.keySet().iterator();
859         String JavaDoc key = null;
860         while(iter.hasNext()){
861             String JavaDoc temp = (String JavaDoc)iter.next();
862             if(metadata.getPath().equals(m_sysPropMappings.get(temp))){
863                 key = temp;
864                 break;
865             }
866         }
867         return key;
868     }
869
870     /* (non-Javadoc)
871      * @see com.simulacramedia.contentmanager.editors.report.rqom.ReportQueryListener#dataChanged()
872      */

873     public void dataChanged() {
874         this.m_buttonRun.setEnabled(false);
875         this.m_reportPanel.setScopeEnabled(m_reportQuery.isReportPanelEditable());
876     }
877     
878 }
879
Popular Tags