1 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 ; 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 55 public class ReportEditor extends JDialog implements LayoutManager, ActionListener, ContextListener, ReportQueryListener { 56 57 60 private static final String TAG_PROPERTYINSTANCE_VALUES = "PropertyInstanceValues"; 61 62 65 private static final String TAG_PROPERTY = "Property"; 66 67 70 private static final String TAG_PROPERTYINSTANCE = "PropertyInstance"; 71 72 75 private static final String ATTRIB_OPERATOR = "operator"; 76 77 80 private static final String TAG_PATH = "Path"; 81 82 85 private static final String TAG_WORKFLOW_STAGE = "WorkflowStage"; 86 87 private static final String TAG_OBJECT_ATTRIBUTES = "ObjectAttributes"; 88 89 private static final String TAG_METADATA = "Metadata"; 90 91 94 private static final String TAG_WORKFLOW_PROPERTYINSTANCE_VALUES = TAG_PROPERTYINSTANCE_VALUES; 96 99 private static final String TAG_WORKFLOW_PROPERTY = TAG_PROPERTY; 101 104 private static final String TAG_WORKFLOW_PROPERTYINSTANCE = TAG_PROPERTYINSTANCE; 106 109 private JButton m_buttonOK = null; 110 111 114 private JButton m_buttonCancel = null; 115 116 119 private JButton m_buttonRun = null; 120 121 124 private JPanel m_panel = null; 125 126 129 private ReportQuery m_reportQuery = null; 130 131 134 private String m_sReportPath = null; 135 136 139 private boolean m_bShowQueryPanel = true; 140 141 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 161 public ReportEditor(String 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 177 public ReportEditor(String 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 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 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 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 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 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 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 339 private ReportEditor(Dialog arg0) throws HeadlessException { 340 super(arg0); 341 } 342 343 348 private ReportEditor(Dialog arg0, boolean arg1) throws HeadlessException { 349 super(arg0, arg1); 350 } 351 352 356 private ReportEditor(Frame arg0) throws HeadlessException { 357 super(arg0); 358 } 359 360 365 private ReportEditor(Frame arg0, boolean arg1) throws HeadlessException { 366 super(arg0, arg1); 367 } 368 369 374 private ReportEditor(Dialog arg0, String arg1) throws HeadlessException { 375 super(arg0, arg1); 376 } 377 378 384 private ReportEditor(Dialog arg0, String arg1, boolean arg2) 385 throws HeadlessException { 386 super(arg0, arg1, arg2); 387 } 388 389 394 private ReportEditor(Frame arg0, String arg1) throws HeadlessException { 395 super(arg0, arg1); 396 } 397 398 404 private ReportEditor(Frame arg0, String arg1, boolean arg2) 405 throws HeadlessException { 406 super(arg0, arg1, arg2); 407 } 408 409 416 private ReportEditor( 417 Dialog arg0, 418 String arg1, 419 boolean arg2, 420 GraphicsConfiguration arg3) 421 throws HeadlessException { 422 super(arg0, arg1, arg2, arg3); 423 } 424 425 431 private ReportEditor( 432 Frame arg0, 433 String arg1, 434 boolean arg2, 435 GraphicsConfiguration arg3) { 436 super(arg0, arg1, arg2, arg3); 437 } 438 439 442 public void removeLayoutComponent(Component arg0) { 443 } 444 445 448 public void addLayoutComponent(String arg0, Component arg1) { 449 } 450 451 454 public Dimension minimumLayoutSize(Container arg0) { 455 return this.getSize(); 456 } 457 458 461 public Dimension preferredLayoutSize(Container arg0) { 462 return this.getSize(); 463 } 464 465 468 public void contextMessage(ContextEvent ce) { 469 if(ce.CONTEXT_TYPE==ContextType.CONTEXT_APP_FOCUS) { 470 this.toFront(); 471 } 472 } 473 474 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 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 strbuf = new StringBuffer (); 497 498 strbuf.append("descendant::").append(TAG_PROPERTYINSTANCE); 499 500 DOMXPath xpProps = new DOMXPath(strbuf.toString()); 501 502 strbuf.setLength(0); 503 504 String 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 propEls = xpProps.selectNodes(elRoot); 521 itor = propEls.iterator(); 522 while (itor.hasNext()) { 523 Element element = (Element) itor.next(); 524 String sPropPath = xpPropPath.stringValueOf(element); 525 526 String sPropVal = xpValueData.stringValueOf(element); 527 if(sPropVal.equals("")) { 528 sPropVal = xpValuePath.stringValueOf(element); 529 } 530 String 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 sReportAtt = "descendant::ReportAttributes/"; 556 DOMXPath xpObjectAttributes = new DOMXPath(sReportAtt + "ObjectAttributes/child::*"); 557 List objectAttEls = xpObjectAttributes.selectNodes(elRoot); 558 Iterator iter = objectAttEls.iterator(); 559 while (iter.hasNext()) { 560 Element element = (Element) iter.next(); 561 String sObject = element.getTagName(); 562 String sSysProp = (String )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 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 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 sPath = xpPath.stringValueOf(element); 582 Metadata metadata = new Metadata(sPath,this.m_reportQuery); 583 m_reportQuery.addOrderByAttributes(metadata); 584 } else { 585 String sObject = element.getTagName(); 586 String sSysProp = (String )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 users = xpUsers.selectNodes(elRoot); 595 itor = users.iterator(); 596 while (itor.hasNext()) { 597 Element element = (Element) itor.next(); 598 String 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 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 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 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 sPath = workflowStage.getPath(); 720 String 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 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 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 sActivity = (String ) 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 getSysPropFromMetadata(Metadata metadata){ 858 Iterator iter = m_sysPropMappings.keySet().iterator(); 859 String key = null; 860 while(iter.hasNext()){ 861 String temp = (String )iter.next(); 862 if(metadata.getPath().equals(m_sysPropMappings.get(temp))){ 863 key = temp; 864 break; 865 } 866 } 867 return key; 868 } 869 870 873 public void dataChanged() { 874 this.m_buttonRun.setEnabled(false); 875 this.m_reportPanel.setScopeEnabled(m_reportQuery.isReportPanelEditable()); 876 } 877 878 } 879 | Popular Tags |