Author: jawi Date: Wed Jul 19 13:07:57 2017 New Revision: 1802386 URL: http://svn.apache.org/viewvc?rev=1802386&view=rev Log: ACE-625 show more details in Web UI
- added extensions to show the details of artifacts (refactoring the existing target-info extension); - added extensions for all associations in the various columns. Added: ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/ ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/ArtifactInfoExtensionFactory.java (with props) ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/ArtifactToFeatureAssocExtensionFactory.java (with props) ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/BaseAssociationExtensionFactory.java (with props) ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/BaseInfoExtensionFactory.java (with props) ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/BaseUIExtensionFactory.java (with props) ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/DistributionToFeatureAssocExtensionFactory.java (with props) ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/DistributionToTargetAssocExtensionFactory.java (with props) ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/FeatureToArtifactAssocExtensionFactory.java (with props) ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/FeatureToDistributionAssocExtensionFactory.java (with props) ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/TargetInfoExtensionFactory.java (with props) ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/TargetToDistributionAssocExtensionFactory.java (with props) Modified: ace/trunk/org.apache.ace.webui.vaadin/bnd.bnd ace/trunk/org.apache.ace.webui.vaadin/resources/VAADIN/themes/reindeer/styles.css ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/Activator.java ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/EditWindow.java ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/VaadinClient.java Modified: ace/trunk/org.apache.ace.webui.vaadin/bnd.bnd URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.webui.vaadin/bnd.bnd?rev=1802386&r1=1802385&r2=1802386&view=diff ============================================================================== --- ace/trunk/org.apache.ace.webui.vaadin/bnd.bnd (original) +++ ace/trunk/org.apache.ace.webui.vaadin/bnd.bnd Wed Jul 19 13:07:57 2017 @@ -20,6 +20,7 @@ Private-Package: \ org.apache.ace.webui.domain,\ org.apache.ace.webui.vaadin,\ org.apache.ace.webui.vaadin.component,\ + org.apache.ace.webui.vaadin.extension,\ org.apache.ace.bnd.registry,\ org.apache.ace.bnd.repository,\ org.kxml2.io,\ @@ -30,7 +31,7 @@ Private-Package: \ org.osgi.service.obr,\ org.osgi.service.repository*,\ org.xmlpull.v1 - + Export-Package: org.apache.ace.webui Include-Resource: resources/ Bundle-Activator: org.apache.ace.webui.vaadin.Activator Modified: ace/trunk/org.apache.ace.webui.vaadin/resources/VAADIN/themes/reindeer/styles.css URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.webui.vaadin/resources/VAADIN/themes/reindeer/styles.css?rev=1802386&r1=1802385&r2=1802386&view=diff ============================================================================== --- ace/trunk/org.apache.ace.webui.vaadin/resources/VAADIN/themes/reindeer/styles.css (original) +++ ace/trunk/org.apache.ace.webui.vaadin/resources/VAADIN/themes/reindeer/styles.css Wed Jul 19 13:07:57 2017 @@ -51,13 +51,13 @@ padding: .2em 1em; color: inherit; font: inherit; - line-height: normal; + line-height: normal; -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; - user-select: none; + user-select: none; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -ms-box-sizing: border-box; @@ -173,7 +173,7 @@ /* * Checkbox styles * -------------------------------------- */ - + .v-checkbox { display: block; } @@ -299,7 +299,7 @@ div.v-app-loading { position: relative; } /** - * Try to handle printing somehow. Reasonable printing support + * Try to handle printing somehow. Reasonable printing support * needs application specific planning and CSS tuning. */ @media print { @@ -421,7 +421,7 @@ div.v-app-loading { .v-label h5, .v-label h6 { line-height: normal; -} +} /* Loading indicator states * Note: client side expects that loading indicator has a height. It depends on * this css property to ensure browsers have applied all required styles. @@ -498,27 +498,27 @@ div.v-app-loading { overflow: auto; } .v-ios.v-webkit & .v-scrollable { - -webkit-overflow-scrolling: touch; -} -/* Disable native scrolling on iOS 5 due to #8792 */ + -webkit-overflow-scrolling: touch; +} +/* Disable native scrolling on iOS 5 due to #8792 */ .v-ios5.v-webkit & .v-scrollable { - -webkit-overflow-scrolling: none; -} + -webkit-overflow-scrolling: none; +} .v-csslayout { overflow: hidden; } .v-csslayout-margin-top { - padding-top: 12px; + padding-top: 12px; } .v-csslayout-margin-bottom { - padding-bottom: 12px; + padding-bottom: 12px; } .v-csslayout-margin-left { - padding-left: 12px; + padding-left: 12px; } .v-csslayout-margin-right { - padding-right: 12px; + padding-right: 12px; } .v-customcomponent { @@ -554,7 +554,7 @@ div.v-app-loading { margin: 0; } .v-datefield-calendarpanel:focus { - outline:none; + outline:none; } .v-datefield-calendarpanel-header td { text-align: center; @@ -815,17 +815,17 @@ div.v-app-loading { .v-formlayout-captioncell .v-caption { overflow: visible; } -.v-formlayout-spacing > tbody > .v-formlayout-row > .v-formlayout-captioncell, +.v-formlayout-spacing > tbody > .v-formlayout-row > .v-formlayout-captioncell, .v-formlayout-spacing > tbody > .v-formlayout-row > .v-formlayout-contentcell, .v-formlayout-spacing > tbody > .v-formlayout-row > .v-formlayout-errorcell { padding-top: 6px; } -.v-formlayout-spacing > tbody > .v-formlayout-firstrow > .v-formlayout-captioncell, +.v-formlayout-spacing > tbody > .v-formlayout-firstrow > .v-formlayout-captioncell, .v-formlayout-spacing > tbody > .v-formlayout-firstrow > .v-formlayout-contentcell, .v-formlayout-spacing > tbody > .v-formlayout-firstrow > .v-formlayout-errorcell { padding-top: 0; } -.v-formlayout-margin-top > tbody > .v-formlayout-firstrow > .v-formlayout-captioncell, +.v-formlayout-margin-top > tbody > .v-formlayout-firstrow > .v-formlayout-captioncell, .v-formlayout-margin-top > tbody > .v-formlayout-firstrow > .v-formlayout-contentcell, .v-formlayout-margin-top > tbody > .v-formlayout-firstrow > .v-formlayout-errorcell { padding-top: 12px; @@ -835,12 +835,12 @@ div.v-app-loading { .v-formlayout-margin-bottom > tbody > .v-formlayout-lastrow > .v-formlayout-errorcell { padding-bottom: 12px; } -.v-ie6 .v-formlayout-spacing .v-formlayout-row .v-formlayout-captioncell, +.v-ie6 .v-formlayout-spacing .v-formlayout-row .v-formlayout-captioncell, .v-ie6 .v-formlayout-spacing .v-formlayout-row .v-formlayout-contentcell, .v-ie6 .v-formlayout-spacing .v-formlayout-row .v-formlayout-errorcell { padding-top: expression(/v-formlayout-spacing/.test(this.parentNode.parentNode.parentNode.className) ? "6px" : "0px"); } -.v-ie6 .v-formlayout-margin-top .v-formlayout-row .v-formlayout-captioncell, +.v-ie6 .v-formlayout-margin-top .v-formlayout-row .v-formlayout-captioncell, .v-ie6 .v-formlayout-margin-top .v-formlayout-row .v-formlayout-contentcell, .v-ie6 .v-formlayout-margin-top .v-formlayout-row .v-formlayout-errorcell { padding-top: expression((/v-formlayout-firstrow/.test(this.parentNode.className) && /v-formlayout-margin-top/.test(this.parentNode.parentNode.parentNode.className)) ? "12px" : (/v-formlayout-spacing/.test(this.parentNode.parentNode.parentNode.className) ? "6px" : "0px")); @@ -852,7 +852,7 @@ div.v-app-loading { } .v-formlayout-margin-left > tbody > .v-formlayout-row > .v-formlayout-captioncell { padding-left: 12px; -} +} .v-formlayout-margin-right > tbody > .v-formlayout-row > .v-formlayout-contentcell { padding-right: 12px; } @@ -874,7 +874,7 @@ div.v-app-loading { } .v-gridlayout-margin-left { padding-left: 12px; -} +} .v-gridlayout-margin-right { padding-right: 12px; } @@ -898,7 +898,7 @@ div.v-app-loading { } .v-link { - white-space: nowrap; + white-space: nowrap; } .v-link a { vertical-align: middle; @@ -949,7 +949,7 @@ div.v-app-loading { background: #333; color: #fff; } -.v-menubar-submenu .v-menubar-menuitem { +.v-menubar-submenu .v-menubar-menuitem { cursor: default; display: block; position: relative; @@ -1006,7 +1006,7 @@ div.v-app-loading { .v-menubar-popup:focus, .v-menubar-popup .popupContent:focus, .v-menubar-popup .popupContent .v-menubar-submenu:focus{ - outline: none; + outline: none; } /* Checkboxes for checkable/checked menu items */ /* Checked/unchecked requires combined style selected-(un)checked for IE6 */ @@ -1016,7 +1016,7 @@ div.v-app-loading { .v-menubar-submenu-check-column .v-menubar-menuitem-caption { padding-left: 18px; } -.v-menubar-submenu .v-menubar-menuitem-checked .v-menubar-menuitem-caption { +.v-menubar-submenu .v-menubar-menuitem-checked .v-menubar-menuitem-caption { background: transparent url(../base/menubar/img/check.gif) no-repeat left; } @@ -1027,7 +1027,7 @@ div.v-app-loading { overflow: hidden; padding: 1em; max-width:85%; - + } .v-Notification h1, .v-Notification p, @@ -1204,7 +1204,7 @@ div.v-progressindicator-indeterminate-di .v-select-optiongroup .v-icon { vertical-align: middle; white-space: nowrap; - margin: 0 2px; + margin: 0 2px; } .v-ie .v-select-optiongroup .v-select-option { zoom: 1; @@ -1344,7 +1344,7 @@ div.v-progressindicator-indeterminate-di */ /* Required field styles (disabled by default) - + .v-filterselect-error .v-filterselect-input, .v-select-required .v-select-option, .v-select-required .v-select-select, @@ -1438,7 +1438,7 @@ div.v-progressindicator-indeterminate-di filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2) alpha(opacity=20); margin-top: -2px; margin-left: -2px; -} +} .v-slider { margin: 5px 0; @@ -1450,7 +1450,7 @@ div.v-progressindicator-indeterminate-di background: #eee; border-left: 1px solid #ddd; border-right: 1px solid #eee; - + } .v-slider-handle { background: #aaa; @@ -1565,12 +1565,12 @@ div.v-progressindicator-indeterminate-di } /* Table theme building instructions - * - * Vaadin scroll table is very complex widget with dozens of features. These + * + * Vaadin scroll table is very complex widget with dozens of features. These * features set some limitations for theme builder. To keep things working, it * is safest to try to just override values used in default theme and comfort to * these instructions. - * + * * Borders in table header and in table body need to be same width * - specify vertical borders on .v-table-header-wrap and .v-table-body * @@ -1581,7 +1581,7 @@ div.v-progressindicator-indeterminate-di * - background is allowed for both elements * * Table headers: - * - table cells in header contain .v-table-resizer and + * - table cells in header contain .v-table-resizer and * .v-table-caption-container div elements, which are both floated to right * - to align header caption to body content resizer width + .v-table-caption-container * padding right should be equal to content cells padding-right and border-right. @@ -1644,8 +1644,8 @@ div.v-progressindicator-indeterminate-di .v-table-footer-cell { cursor: pointer; } -.v-table-footer-container { - float:right; +.v-table-footer-container { + float:right; padding-right:6px; overflow:hidden; white-space:nowrap; @@ -1654,14 +1654,14 @@ div.v-progressindicator-indeterminate-di display: block; height: 1.2em; float: right; - background: #aaa; + background: #aaa; cursor: e-resize; /* Opera does not support col-resize, so use e-resize instead */ - cursor: col-resize; + cursor: col-resize; width: 1px; overflow: hidden; } .v-table.v-disabled .v-table-resizer { - cursor: default; + cursor: default; } .v-table-caption-container { overflow: hidden; @@ -1685,7 +1685,7 @@ div.v-progressindicator-indeterminate-di width: 16px; height: 1.2em; float: right; -} +} .v-table-header-cell-asc .v-table-sort-indicator { background: transparent url(../base/common/img/sprites.png) no-repeat right 6px; } @@ -1813,7 +1813,7 @@ div.v-progressindicator-indeterminate-di } /* row in column selector */ .v-on { - + } .v-off { color: #ddd; @@ -2029,18 +2029,18 @@ textarea.v-textarea-readonly:focus { .v-textarea-error, .v-textfield-error, .v-richtextarea-error iframe.gwt-RichTextArea { - background: #FFE0E0; + background: #FFE0E0; } */ /* Disabled by default .v-textarea-required, .v-textfield-required, .v-richtextarea-required iframe.gwt-RichTextArea { - background: #FFE0E0; + background: #FFE0E0; } */ /* Safari focus glow fix */ -.v-sa input:focus, +.v-sa input:focus, .v-sa textarea:focus { outline-width: medium; } @@ -2093,7 +2093,7 @@ textarea.v-textarea-readonly:focus { } .v-richtextarea .gwt-RichTextToolbar .gwt-ToggleButton img, .v-richtextarea .gwt-RichTextToolbar .gwt-PushButton img { - + } .v-richtextarea .gwt-RichTextToolbar .gwt-ListBox { width: 24.5%; @@ -2144,8 +2144,8 @@ div.v-tree-node-leaf { .v-tree-node-children { padding-left: 1em; } -/* ie6compatnode is hidden from non ie6 browsers, for ie6 - * uses weird hack to sink all events properly +/* ie6compatnode is hidden from non ie6 browsers, for ie6 + * uses weird hack to sink all events properly */ .v-tree-node-ie6compatnode { display: none; @@ -2291,16 +2291,16 @@ div.v-tree-node-leaf { } .v-ie6 .v-treetable-node-closed { - background-image: url(../base/treetable/img/arrow-right.gif); -} + background-image: url(../base/treetable/img/arrow-right.gif); +} .v-treetable-node-open { background: url(../base/treetable/img/arrow-down.png) right top no-repeat; } .v-ie6 .v-treetable-node-open { - background-image: url(../base/treetable/img/arrow-down.gif); -} + background-image: url(../base/treetable/img/arrow-down.gif); +} .v-treetable .v-checkbox { display: inline-block; @@ -2388,7 +2388,7 @@ div table.v-treetable-animation-clone tr width: 100%; text-align: left; } - + .v-window { background: #fff; @@ -2400,7 +2400,7 @@ div table.v-treetable-animation-clone tr .v-window-outerheader, .v-window-draggingCurtain { - cursor: move; + cursor: move; } .v-window-header { @@ -2481,9 +2481,9 @@ div.v-window-header { filter: alpha(opacity=50); } /* IE6 workaround for position:fixed; */ -.v-ie6 .v-window-modalitycurtain { +.v-ie6 .v-window-modalitycurtain { position: absolute; - top: expression(document.documentElement.scrollTop + "px"); + top: expression(document.documentElement.scrollTop + "px"); } /* min-width for IE6 */ .v-ie6 .v-window { @@ -2563,12 +2563,12 @@ div.v-window-header { /* Automatically compiled css file from subdirectories. */ /*------------ - * General vertical and horizontal sprites + * General vertical and horizontal sprites * -----------*/ /*------------ - * Buttons + * Buttons * -----------*/ .v-accordion { @@ -2700,20 +2700,20 @@ div.v-window-header { -background-image: url(button/img/black-button-sprites-ie6.png); background-position: left -0px; } - + .black .v-button:focus .v-button-wrap { background-image: url(button/img/black-button-sprites.png); -background-image: url(button/img/black-button-sprites-ie6.png); background-position: right -26px; } - + .black .v-button:active, .black .v-button.v-pressed { background-image: url(button/img/black-button-sprites.png); -background-image: url(button/img/black-button-sprites-ie6.png); background-position: left -52px; } - + .black .v-button:active .v-button-wrap, .black .v-button.v-pressed .v-button-wrap { background-image: url(button/img/black-button-sprites.png); @@ -2727,14 +2727,14 @@ div.v-window-header { -background-image: url(button/img/black-button-sprites-ie6.png); background-position: left -104px; } - + .black .v-button-wrap, .black .v-disabled.v-button .v-button-wrap { background-image: url(button/img/black-button-sprites.png); -background-image: url(button/img/black-button-sprites-ie6.png); background-position: right -130px; } - + .black .v-button-caption { color: #c9ccce; text-shadow: #121314 0 -1px 0; @@ -2745,13 +2745,13 @@ div.v-window-header { -background-image: url(button/img/button-sprites-ie6.png); background-position: left -156px; } - + .v-button-primary:focus .v-button-wrap { background-image: url(button/img/button-sprites.png); -background-image: url(button/img/button-sprites-ie6.png); background-position: right -182px; } - + .v-button-primary:active, .v-button-primary.v-pressed { background-image: url(button/img/button-sprites.png); @@ -2772,14 +2772,14 @@ div.v-window-header { -background-image: url(button/img/button-sprites-ie6.png); background-position: left -260px; } - + .v-button-primary .v-button-wrap, .v-disabled.v-button-primary .v-button-wrap { background-image: url(button/img/button-sprites.png); -background-image: url(button/img/button-sprites-ie6.png); background-position: right -286px; } - + @@ -2791,21 +2791,21 @@ div.v-window-header { -background-image: url(button/img/black-button-sprites-ie6.png); background-position: left -156px; } - + .black .v-button-primary:focus .v-button-wrap { background-image: url(button/img/black-button-sprites.png); -background-image: url(button/img/black-button-sprites-ie6.png); background-position: right -182px; color: #eaf4fb; } - + .black .v-button-primary:active, .black .v-button-primary.v-pressed { background-image: url(button/img/black-button-sprites.png); -background-image: url(button/img/black-button-sprites-ie6.png); background-position: left -208px; } - + .black .v-button-primary:active .v-button-wrap, .black .v-button-primary.v-pressed .v-button-wrap { background-image: url(button/img/black-button-sprites.png); @@ -2819,7 +2819,7 @@ div.v-window-header { -background-image: url(button/img/black-button-sprites-ie6.png); background-position: left -260px; } - + .black .v-button-primary .v-button-wrap, .black .v-disabled.v-button-primary .v-button-wrap { background-image: url(button/img/black-button-sprites.png); @@ -2832,13 +2832,13 @@ div.v-window-header { -background-image: url(button/img/button-sprites-ie6.png); background-position: left -312px; } - + .v-button-small:focus .v-button-wrap { background-image: url(button/img/button-sprites.png); -background-image: url(button/img/button-sprites-ie6.png); background-position: right -332px; } - + .v-button-small:active, .v-button-small.v-pressed { background-image: url(button/img/button-sprites.png); @@ -2860,7 +2860,7 @@ div.v-window-header { background-position: left -392px; height: 20px; } - + .v-button-small .v-button-wrap, .v-disabled.v-button-small .v-button-wrap { background-image: url(button/img/button-sprites.png); @@ -2873,7 +2873,7 @@ div.v-window-header { .v-button-small .v-button-caption { font-weight: normal; } - + @@ -2884,20 +2884,20 @@ div.v-window-header { -background-image: url(button/img/black-button-sprites-ie6.png); background-position: left -312px; } - + .black .v-button-small:focus .v-button-wrap { background-image: url(button/img/black-button-sprites.png); -background-image: url(button/img/black-button-sprites-ie6.png); background-position: right -332px; } - + .black .v-button-small:active, .black .v-button-small.v-pressed { background-image: url(button/img/black-button-sprites.png); -background-image: url(button/img/black-button-sprites-ie6.png); background-position: left -352px; } - + .black .v-button-small:active .v-button-wrap, .black .v-button-small.v-pressed .v-button-wrap { background-image: url(button/img/black-button-sprites.png); @@ -2911,7 +2911,7 @@ div.v-window-header { -background-image: url(button/img/black-button-sprites-ie6.png); background-position: left -392px; } - + .black .v-button-small .v-button-wrap, .black .v-disabled.v-button-small .v-button-wrap { background-image: url(button/img/black-button-sprites.png); @@ -2940,7 +2940,7 @@ div.v-window-header { .v-button.v-button-link.v-disabled .v-button-wrap { cursor: default; } - + .v-button-link .v-button-caption, .v-nativebutton-link .v-nativebutton-caption { line-height: inherit; @@ -2949,7 +2949,7 @@ div.v-window-header { font-size: 12px; text-shadow: none; } - + .v-button-link:focus .v-button-caption, .v-nativebutton-link:focus .v-nativebutton-caption { outline: 1px dotted #1b699f; @@ -3168,7 +3168,7 @@ div.v-window-header { } input.v-textfield-readonly:focus{ - background-color: transparent; + background-color: transparent; } .v-datefield-calendarpanel { border-collapse: collapse; @@ -3618,12 +3618,12 @@ div.v-table-full-height-fields .v-datefi text-align: right; white-space: nowrap; } -.v-formlayout-spacing > tbody > .v-formlayout-row > .v-formlayout-captioncell, +.v-formlayout-spacing > tbody > .v-formlayout-row > .v-formlayout-captioncell, .v-formlayout-spacing > tbody > .v-formlayout-row > .v-formlayout-contentcell, .v-formlayout-spacing > tbody > .v-formlayout-row > .v-formlayout-errorcell { padding-top: 8px; } -.v-formlayout-margin-top > tbody > .v-formlayout-firstrow > .v-formlayout-captioncell, +.v-formlayout-margin-top > tbody > .v-formlayout-firstrow > .v-formlayout-captioncell, .v-formlayout-margin-top > tbody > .v-formlayout-firstrow > .v-formlayout-contentcell, .v-formlayout-margin-top > tbody > .v-formlayout-firstrow > .v-formlayout-errorcell { padding-top: 15px; @@ -3633,12 +3633,12 @@ div.v-table-full-height-fields .v-datefi .v-formlayout-margin-bottom > tbody > .v-formlayout-lastrow > .v-formlayout-errorcell { padding-bottom: 15px; } -.v-ie6 .v-formlayout-spacing .v-formlayout-row .v-formlayout-captioncell, +.v-ie6 .v-formlayout-spacing .v-formlayout-row .v-formlayout-captioncell, .v-ie6 .v-formlayout-spacing .v-formlayout-row .v-formlayout-contentcell, .v-ie6 .v-formlayout-spacing .v-formlayout-row .v-formlayout-errorcell { padding-top: expression(/v-formlayout-spacing/.test(this.parentNode.parentNode.parentNode.className) ? "8px" : "0px"); } -.v-ie6 .v-formlayout-margin-top .v-formlayout-row .v-formlayout-captioncell, +.v-ie6 .v-formlayout-margin-top .v-formlayout-row .v-formlayout-captioncell, .v-ie6 .v-formlayout-margin-top .v-formlayout-row .v-formlayout-contentcell, .v-ie6 .v-formlayout-margin-top .v-formlayout-row .v-formlayout-errorcell { padding-top: expression((/v-formlayout-firstrow/.test(this.parentNode.className) && /v-formlayout-margin-top/.test(this.parentNode.parentNode.parentNode.className)) ? "15px" : (/v-formlayout-spacing/.test(this.parentNode.parentNode.parentNode.className) ? "8px" : "0px")); @@ -3650,7 +3650,7 @@ div.v-table-full-height-fields .v-datefi } .v-formlayout-margin-left > tbody > .v-formlayout-row > .v-formlayout-captioncell { padding-left: 18px; -} +} .v-formlayout-margin-right > tbody > .v-formlayout-row > .v-formlayout-contentcell { padding-right: 18px; } @@ -3851,7 +3851,7 @@ div.v-table-full-height-fields .v-datefi } .v-gridlayout-margin-left { padding-left: 24px; -} +} .v-gridlayout-margin-right { padding-right: 24px; } @@ -3946,7 +3946,7 @@ div.v-table-full-height-fields .v-datefi padding: 1px 26px 1px 10px; line-height: 16px; } -.v-menubar-submenu .v-menubar-menuitem-caption .v-icon { +.v-menubar-submenu .v-menubar-menuitem-caption .v-icon { vertical-align: middle; } .v-menubar .v-menubar-menuitem-selected, @@ -3980,13 +3980,13 @@ div.v-table-full-height-fields .v-datefi .v-menubar-submenu-check-column .v-menubar-menuitem-caption { padding-left: 18px; } -.v-menubar-submenu .v-menubar-menuitem-checked .v-menubar-menuitem-caption { +.v-menubar-submenu .v-menubar-menuitem-checked .v-menubar-menuitem-caption { background: transparent url(menubar/img/checked.png) no-repeat left; } .v-menubar-submenu .v-menubar-menuitem-unchecked .v-menubar-menuitem-caption { background: transparent url(menubar/img/unchecked.png) no-repeat left; } -.v-menubar-submenu .v-menubar-menuitem-selected-checked .v-menubar-menuitem-caption { +.v-menubar-submenu .v-menubar-menuitem-selected-checked .v-menubar-menuitem-caption { background: transparent url(menubar/img/checked-selected.png) no-repeat left; } .v-menubar-submenu .v-menubar-menuitem-selected-unchecked .v-menubar-menuitem-caption { @@ -4007,7 +4007,7 @@ div.v-table-full-height-fields .v-datefi /* Fix for #6793 */ font-weight: bold; } - + .v-Notification p { line-height: 1.3; } @@ -4543,7 +4543,7 @@ div.v-table-full-height-fields .v-datefi border-left: 1px solid #adb0b1; border-right: none; border-top: 1px solid #adb0b1; - border-bottom: 1px solid #adb0b1; + border-bottom: 1px solid #adb0b1; } .v-slider-vertical .v-slider-handle { width: 10px; @@ -4657,17 +4657,17 @@ div.v-table-full-height-fields .v-datefi .v-ie6 .v-table-header-wrap, .v-ie6 .v-table-footer-wrap, .v-ie6 .v-table-column-selector { - /* The header will overflow the Table due to a bug in IE6 after changes in #3003. To fix this (#7314) - * we need to apply position:relative to the wrappers and selector to make them appear on top of the + /* The header will overflow the Table due to a bug in IE6 after changes in #3003. To fix this (#7314) + * we need to apply position:relative to the wrappers and selector to make them appear on top of the * header. We also need to apply it to the table root div to get rid of a really weird IE6 rendering bug - * caused by all this relativeness (see attachment in #7314). + * caused by all this relativeness (see attachment in #7314). */ position: relative; } .v-ie6 .v-table.v-disabled, .v-ie7 .v-table.v-disabled { - /* Fixes ie issue #7324 where disabled shim does not cover table body */ + /* Fixes ie issue #7324 where disabled shim does not cover table body */ position: relative; } @@ -5723,7 +5723,7 @@ textarea.v-textarea-readonly, padding-bottom: 0px; } .v-tree-node-focused span{ - border: 1px dotted black; + border: 1px dotted black; } .v-ie6 .v-tree-node-ie6compatnode.v-tree-node-focused{ padding-left: 0px; @@ -6050,3 +6050,6 @@ textarea.v-textarea-readonly, height: 20px; padding: 1px 4px 0px 0px; } +.v-table-cell-content-pre .v-label { + white-space: pre; +} \ No newline at end of file Modified: ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/Activator.java URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/Activator.java?rev=1802386&r1=1802385&r2=1802386&view=diff ============================================================================== --- ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/Activator.java (original) +++ ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/Activator.java Wed Jul 19 13:07:57 2017 @@ -18,6 +18,13 @@ */ package org.apache.ace.webui.vaadin; +import static org.apache.ace.webui.UIExtensionFactory.EXTENSION_POINT_KEY; +import static org.apache.ace.webui.UIExtensionFactory.EXTENSION_POINT_VALUE_ARTIFACT; +import static org.apache.ace.webui.UIExtensionFactory.EXTENSION_POINT_VALUE_DISTRIBUTION; +import static org.apache.ace.webui.UIExtensionFactory.EXTENSION_POINT_VALUE_FEATURE; +import static org.apache.ace.webui.UIExtensionFactory.EXTENSION_POINT_VALUE_TARGET; +import static org.apache.ace.webui.vaadin.VaadinServlet.DEFAULT_SERVLET_ENDPOINT; +import static org.osgi.framework.Constants.SERVICE_RANKING; import static org.osgi.service.http.whiteboard.HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_NAME; import static org.osgi.service.http.whiteboard.HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_PATH; import static org.osgi.service.http.whiteboard.HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_SELECT; @@ -25,24 +32,25 @@ import static org.osgi.service.http.whit import static org.osgi.service.http.whiteboard.HttpWhiteboardConstants.HTTP_WHITEBOARD_RESOURCE_PREFIX; import static org.osgi.service.http.whiteboard.HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_PATTERN; -import java.util.Map; import java.util.Properties; import javax.servlet.Servlet; -import org.apache.ace.client.repository.stateful.StatefulTargetObject; import org.apache.ace.webui.UIExtensionFactory; +import org.apache.ace.webui.vaadin.extension.ArtifactInfoExtensionFactory; +import org.apache.ace.webui.vaadin.extension.ArtifactToFeatureAssocExtensionFactory; +import org.apache.ace.webui.vaadin.extension.DistributionToFeatureAssocExtensionFactory; +import org.apache.ace.webui.vaadin.extension.DistributionToTargetAssocExtensionFactory; +import org.apache.ace.webui.vaadin.extension.FeatureToArtifactAssocExtensionFactory; +import org.apache.ace.webui.vaadin.extension.FeatureToDistributionAssocExtensionFactory; +import org.apache.ace.webui.vaadin.extension.TargetInfoExtensionFactory; +import org.apache.ace.webui.vaadin.extension.TargetToDistributionAssocExtensionFactory; import org.apache.felix.dm.DependencyActivatorBase; import org.apache.felix.dm.DependencyManager; import org.osgi.framework.BundleContext; -import org.osgi.framework.Constants; import org.osgi.service.http.context.ServletContextHelper; import org.osgi.service.log.LogService; -import com.vaadin.ui.Component; -import com.vaadin.ui.Label; -import com.vaadin.ui.VerticalLayout; - public class Activator extends DependencyActivatorBase { private static final String PID = "org.apache.ace.webui.vaadin"; @@ -54,6 +62,7 @@ public class Activator extends Dependenc Properties contextProps = new Properties(); contextProps.put(HTTP_WHITEBOARD_CONTEXT_NAME, ACE_WEBUI_WHITEBOARD_CONTEXT_NAME); contextProps.put(HTTP_WHITEBOARD_CONTEXT_PATH, "/"); + manager.add(createComponent() .setInterface(ServletContextHelper.class.getName(), contextProps) .setImplementation(AceWebuiServletContextHelper.class) @@ -64,12 +73,13 @@ public class Activator extends Dependenc resourceRegistrationProps.put(HTTP_WHITEBOARD_RESOURCE_PREFIX, "/VAADIN"); resourceRegistrationProps.put(HTTP_WHITEBOARD_RESOURCE_PATTERN, "/VAADIN/*"); resourceRegistrationProps.put(HTTP_WHITEBOARD_CONTEXT_SELECT, ACE_WEBUI_WHITEBOARD_CONTEXT_SELECT_FILTER); + manager.add(createComponent() .setInterface(Object.class.getName(), resourceRegistrationProps) .setImplementation(new Object())); Properties props = new Properties(); - props.put(HTTP_WHITEBOARD_SERVLET_PATTERN, VaadinServlet.DEFAULT_SERVLET_ENDPOINT.concat("/*")); + props.put(HTTP_WHITEBOARD_SERVLET_PATTERN, DEFAULT_SERVLET_ENDPOINT.concat("/*")); props.put(HTTP_WHITEBOARD_CONTEXT_SELECT, ACE_WEBUI_WHITEBOARD_CONTEXT_SELECT_FILTER); // register the main application for the ACE UI client @@ -78,29 +88,87 @@ public class Activator extends Dependenc .setImplementation(VaadinServlet.class) .add(createConfigurationDependency().setPid(PID))); + addArtifactExtensions(manager); + addFeatureExtensions(manager); + addDistributionExtensions(manager); + addTargetExtensions(manager); + } + + private void addArtifactExtensions(DependencyManager manager) { + Properties props = new Properties(); + props.put(EXTENSION_POINT_KEY, EXTENSION_POINT_VALUE_ARTIFACT); + props.put(SERVICE_RANKING, Integer.valueOf(110)); + + manager.add(createComponent() + .setInterface(UIExtensionFactory.class.getName(), props) + .setImplementation(ArtifactInfoExtensionFactory.class)); + + props = new Properties(); + props.put(EXTENSION_POINT_KEY, EXTENSION_POINT_VALUE_ARTIFACT); + props.put(SERVICE_RANKING, Integer.valueOf(100)); + + manager.add(createComponent() + .setInterface(UIExtensionFactory.class.getName(), props) + .setImplementation(ArtifactToFeatureAssocExtensionFactory.class)); + } + + private void addFeatureExtensions(DependencyManager manager) { + Properties props = new Properties(); + props.put(EXTENSION_POINT_KEY, EXTENSION_POINT_VALUE_FEATURE); + props.put(SERVICE_RANKING, Integer.valueOf(110)); + + // shows off components that are contributed by extensions + manager.add(createComponent() + .setInterface(UIExtensionFactory.class.getName(), props) + .setImplementation(FeatureToArtifactAssocExtensionFactory.class)); + + props = new Properties(); + props.put(EXTENSION_POINT_KEY, EXTENSION_POINT_VALUE_FEATURE); + props.put(SERVICE_RANKING, Integer.valueOf(100)); + + // shows off components that are contributed by extensions + manager.add(createComponent() + .setInterface(UIExtensionFactory.class.getName(), props) + .setImplementation(FeatureToDistributionAssocExtensionFactory.class)); + } + + private void addDistributionExtensions(DependencyManager manager) { + Properties props = new Properties(); + props.put(EXTENSION_POINT_KEY, EXTENSION_POINT_VALUE_DISTRIBUTION); + props.put(SERVICE_RANKING, Integer.valueOf(110)); + + // shows off components that are contributed by extensions + manager.add(createComponent() + .setInterface(UIExtensionFactory.class.getName(), props) + .setImplementation(DistributionToFeatureAssocExtensionFactory.class)); + + props = new Properties(); + props.put(EXTENSION_POINT_KEY, EXTENSION_POINT_VALUE_DISTRIBUTION); + props.put(SERVICE_RANKING, Integer.valueOf(100)); + + // shows off components that are contributed by extensions + manager.add(createComponent() + .setInterface(UIExtensionFactory.class.getName(), props) + .setImplementation(DistributionToTargetAssocExtensionFactory.class)); + } + + private void addTargetExtensions(DependencyManager manager) { + Properties props = new Properties(); + props.put(EXTENSION_POINT_KEY, EXTENSION_POINT_VALUE_TARGET); + props.put(SERVICE_RANKING, Integer.valueOf(110)); + + // shows off components that are contributed by extensions + manager.add(createComponent() + .setInterface(UIExtensionFactory.class.getName(), props) + .setImplementation(TargetInfoExtensionFactory.class)); + props = new Properties(); - props.put(UIExtensionFactory.EXTENSION_POINT_KEY, UIExtensionFactory.EXTENSION_POINT_VALUE_TARGET); - props.put(Constants.SERVICE_RANKING, Integer.valueOf(100)); + props.put(EXTENSION_POINT_KEY, EXTENSION_POINT_VALUE_TARGET); + props.put(SERVICE_RANKING, Integer.valueOf(100)); // shows off components that are contributed by extensions manager.add(createComponent() .setInterface(UIExtensionFactory.class.getName(), props) - .setImplementation(new UIExtensionFactory() { - public Component create(Map<String, Object> context) { - VerticalLayout vl = new VerticalLayout(); - vl.setCaption("Info"); - final StatefulTargetObject target = (StatefulTargetObject) context.get("statefulTarget"); - Label info = new Label("Target ID : " + target.getID() + "\n" + - "Installed version : " + (target.getLastInstallVersion() == null ? "(none)" : target.getLastInstallVersion()) + "\n" + - "Available version : " + target.getCurrentVersion() + "\n" + - "Approval state : " + target.getApprovalState() + "\n" + - "Store state : " + target.getStoreState() + "\n" + - "Provisioning state : " + target.getProvisioningState() + "\n" + - "Registration state : " + target.getRegistrationState()); - info.setContentMode(Label.CONTENT_PREFORMATTED); - vl.addComponent(info); - return vl; - } - })); + .setImplementation(TargetToDistributionAssocExtensionFactory.class)); } } Modified: ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/EditWindow.java URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/EditWindow.java?rev=1802386&r1=1802385&r2=1802386&view=diff ============================================================================== --- ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/EditWindow.java (original) +++ ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/EditWindow.java Wed Jul 19 13:07:57 2017 @@ -29,6 +29,7 @@ import com.vaadin.event.ShortcutAction.K import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickEvent; +import com.vaadin.ui.Component; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.TabSheet; import com.vaadin.ui.TextField; @@ -64,7 +65,7 @@ public abstract class EditWindow extends /** * Shows this dialog on screen. - * + * * @param window the parent window to show this dialog on, cannot be <code>null</code>. */ public void show(Window parent) { @@ -80,7 +81,7 @@ public abstract class EditWindow extends /** * Called when the {@link #onOk(String, String)} method failed with an exception. - * + * * @param e the exception to handle, never <code>null</code>. */ protected abstract void handleError(Exception e); @@ -89,7 +90,7 @@ public abstract class EditWindow extends * @param object * @param factories */ - protected void initDialog(final NamedObject object, List<UIExtensionFactory> factories) { + protected void initDialog(NamedObject object, List<UIExtensionFactory> factories) { VerticalLayout fields = new VerticalLayout(); fields.setSpacing(true); fields.addComponent(m_name); @@ -101,12 +102,15 @@ public abstract class EditWindow extends tabs.setVisible(!factories.isEmpty()); Map<String, Object> context = new HashMap<>(); - context.put("object", object); + context.put("object", object.getObject()); populateContext(context); for (UIExtensionFactory factory : factories) { try { - tabs.addTab(factory.create(context)); + Component tabComp = factory.create(context); + if (tabComp != null) { + tabs.addTab(tabComp); + } } catch (Throwable ex) { // We ignore extension factories that throw exceptions @@ -152,17 +156,17 @@ public abstract class EditWindow extends // The components added to the window are actually added to the window's // layout; you can use either. Alignments are set using the layout layout.setComponentAlignment(buttonBar, Alignment.BOTTOM_RIGHT); - + m_name.focus(); } - + protected Map<String, Object> populateContext(Map<String, Object> context) { return context; } /** * Called when the user acknowledges this window by pressing Ok. - * + * * @param name the value of the name field; * @param description the value of the description field. * @throws Exception in case the creation failed. Modified: ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/VaadinClient.java URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/VaadinClient.java?rev=1802386&r1=1802385&r2=1802386&view=diff ============================================================================== --- ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/VaadinClient.java (original) +++ ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/VaadinClient.java Wed Jul 19 13:07:57 2017 @@ -60,7 +60,6 @@ import org.apache.ace.client.repository. import org.apache.ace.connectionfactory.ConnectionFactory; import org.apache.ace.webui.NamedObject; import org.apache.ace.webui.UIExtensionFactory; -import org.apache.ace.webui.domain.NamedStatefulTargetObject; import org.apache.ace.webui.domain.NamedTargetObject; import org.apache.ace.webui.vaadin.LoginWindow.LoginFunction; import org.apache.ace.webui.vaadin.UploadHelper.ArtifactDropHandler; @@ -906,10 +905,7 @@ public class VaadinClient extends com.va @Override protected Map<String, Object> populateContext(Map<String, Object> context) { if (object instanceof NamedTargetObject) { - context.put("statefulTarget", m_statefulTargetRepository.get(object.getDefinition())); - } - else if (object instanceof NamedStatefulTargetObject) { - context.put("statefulTarget", object.getObject()); + context.put("object", m_statefulTargetRepository.get(object.getDefinition())); } return context; } Added: ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/ArtifactInfoExtensionFactory.java URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/ArtifactInfoExtensionFactory.java?rev=1802386&view=auto ============================================================================== --- ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/ArtifactInfoExtensionFactory.java (added) +++ ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/ArtifactInfoExtensionFactory.java Wed Jul 19 13:07:57 2017 @@ -0,0 +1,38 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.ace.webui.vaadin.extension; + +import org.apache.ace.client.repository.object.ArtifactObject; + +import com.vaadin.ui.Table; + +/** + * Provides a UI extension for the artifact details window showing some details on an artifact. + */ +public class ArtifactInfoExtensionFactory extends BaseInfoExtensionFactory<ArtifactObject> { + + @Override + protected void addTableRows(Table table, ArtifactObject artifact) { + addItem(table, "MIME type", artifact.getMimetype()); + addItem(table, "Processor PID", artifact.getProcessorPID()); + addItem(table, "Resource ID", artifact.getResourceId()); + addItem(table, "Size", artifact.getSize()); + addItem(table, "URL", artifact.getURL()); + } +} Propchange: ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/ArtifactInfoExtensionFactory.java ------------------------------------------------------------------------------ svn:eol-style = native Added: ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/ArtifactToFeatureAssocExtensionFactory.java URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/ArtifactToFeatureAssocExtensionFactory.java?rev=1802386&view=auto ============================================================================== --- ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/ArtifactToFeatureAssocExtensionFactory.java (added) +++ ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/ArtifactToFeatureAssocExtensionFactory.java Wed Jul 19 13:07:57 2017 @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.ace.webui.vaadin.extension; + +import java.util.stream.Stream; + +import org.apache.ace.client.repository.object.Artifact2FeatureAssociation; +import org.apache.ace.client.repository.object.ArtifactObject; + +/** + * Provides a UI extension for the details window showing some details on all associations. + */ +public class ArtifactToFeatureAssocExtensionFactory extends BaseAssociationExtensionFactory<ArtifactObject, Artifact2FeatureAssociation> { + + public ArtifactToFeatureAssocExtensionFactory() { + super("Features"); + } + + @Override + protected Stream<Artifact2FeatureAssociation> getAssocations(ArtifactObject artifact) { + return artifact.getFeatures().stream() + .flatMap(f -> artifact.getAssociationsWith(f).stream()); + } + +} Propchange: ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/ArtifactToFeatureAssocExtensionFactory.java ------------------------------------------------------------------------------ svn:eol-style = native Added: ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/BaseAssociationExtensionFactory.java URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/BaseAssociationExtensionFactory.java?rev=1802386&view=auto ============================================================================== --- ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/BaseAssociationExtensionFactory.java (added) +++ ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/BaseAssociationExtensionFactory.java Wed Jul 19 13:07:57 2017 @@ -0,0 +1,78 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.ace.webui.vaadin.extension; + +import static org.apache.ace.client.repository.Association.LEFT_CARDINALITY; +import static org.apache.ace.client.repository.Association.LEFT_ENDPOINT; +import static org.apache.ace.client.repository.Association.RIGHT_CARDINALITY; +import static org.apache.ace.client.repository.Association.RIGHT_ENDPOINT; + +import java.util.stream.Stream; + +import org.apache.ace.client.repository.Association; +import org.apache.ace.client.repository.RepositoryObject; + +import com.vaadin.ui.Component; +import com.vaadin.ui.Label; +import com.vaadin.ui.Table; + +/** + * Provides a UI extension for the target details window showing some details on a (stateful) target. + */ +abstract class BaseAssociationExtensionFactory<OBJ extends RepositoryObject, ASSOC extends Association<?, ?>> extends BaseUIExtensionFactory<OBJ> { + + protected BaseAssociationExtensionFactory(String caption) { + super(caption); + } + + @Override + public final Component create(OBJ obj) { + Table table = new Table(); + table.setEditable(false); + table.setWidth("100%"); + + table.addContainerProperty("Left endpoint", Label.class, null); + table.addContainerProperty("Left cardinality", Label.class, null); + table.addContainerProperty("Right endpoint", Label.class, null); + table.addContainerProperty("Right cardinality", Label.class, null); + + table.setColumnExpandRatio("Left endpoint", 1.0f); + table.setColumnExpandRatio("Left cardinality", 0.12f); + table.setColumnExpandRatio("Right endpoint", 1.0f); + table.setColumnExpandRatio("Right cardinality", 0.12f); + + getAssocations(obj) + .forEach(assoc -> table.addItem(new Object[] { + assoc.getAttribute(LEFT_ENDPOINT), + getCardinality(assoc.getAttribute(LEFT_CARDINALITY)), + assoc.getAttribute(RIGHT_ENDPOINT), + getCardinality(assoc.getAttribute(RIGHT_CARDINALITY)) }, null)); + + return table; + } + + protected abstract Stream<ASSOC> getAssocations(OBJ obj); + + private String getCardinality(String cardinality) { + if (cardinality.equals(Integer.toString(Integer.MAX_VALUE))) { + cardinality = "*"; + } + return cardinality; + } +} Propchange: ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/BaseAssociationExtensionFactory.java ------------------------------------------------------------------------------ svn:eol-style = native Added: ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/BaseInfoExtensionFactory.java URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/BaseInfoExtensionFactory.java?rev=1802386&view=auto ============================================================================== --- ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/BaseInfoExtensionFactory.java (added) +++ ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/BaseInfoExtensionFactory.java Wed Jul 19 13:07:57 2017 @@ -0,0 +1,72 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.ace.webui.vaadin.extension; + +import org.apache.ace.client.repository.RepositoryObject; + +import com.vaadin.ui.Component; +import com.vaadin.ui.Label; +import com.vaadin.ui.Table; + +/** + * Provides a UI extension for the target details window showing some details on a (stateful) target. + */ +abstract class BaseInfoExtensionFactory<OBJ extends RepositoryObject> extends BaseUIExtensionFactory<OBJ> { + + protected BaseInfoExtensionFactory() { + super("Info"); + } + + @Override + public final Component create(OBJ obj) { + Table table = new Table(); + table.setEditable(false); + table.setWidth("100%"); + + table.addContainerProperty("Name", Label.class, null); + table.addContainerProperty("Value", Label.class, null); + + table.setColumnExpandRatio("Name", 0.22f); + table.setColumnExpandRatio("Value", 1.0f); + + addTableRows(table, obj); + + return table; + } + + protected final void addItem(Table table, String label, Enum<?> value) { + if (value != null) { + table.addItem(new Object[] { label, value.name() }, null); + } + } + + protected final void addItem(Table table, String label, Long value) { + if (value != null && value.longValue() >= 0) { + table.addItem(new Object[] { label, value }, null); + } + } + + protected final void addItem(Table table, String label, String value) { + if (value != null && !"".equals(value)) { + table.addItem(new Object[] { label, value }, null); + } + } + + protected abstract void addTableRows(Table table, OBJ obj); +} Propchange: ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/BaseInfoExtensionFactory.java ------------------------------------------------------------------------------ svn:eol-style = native Added: ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/BaseUIExtensionFactory.java URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/BaseUIExtensionFactory.java?rev=1802386&view=auto ============================================================================== --- ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/BaseUIExtensionFactory.java (added) +++ ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/BaseUIExtensionFactory.java Wed Jul 19 13:07:57 2017 @@ -0,0 +1,60 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.ace.webui.vaadin.extension; + +import java.util.Map; + +import org.apache.ace.client.repository.RepositoryObject; +import org.apache.ace.webui.UIExtensionFactory; + +import com.vaadin.ui.Component; +import com.vaadin.ui.VerticalLayout; + +abstract class BaseUIExtensionFactory<OBJ extends RepositoryObject> implements UIExtensionFactory { + private final String m_caption; + + protected BaseUIExtensionFactory(String caption) { + m_caption = caption; + } + + @Override + public final Component create(Map<String, Object> context) { + VerticalLayout vl = new VerticalLayout(); + vl.setCaption(m_caption); + vl.setSpacing(false); + vl.setSizeFull(); + + OBJ obj = getObjectFromContext(context); + if (obj == null) { + return null; + } + + vl.addComponent(create(obj)); + + return vl; + } + + abstract Component create(OBJ obj); + + @SuppressWarnings("unchecked") + private OBJ getObjectFromContext(Map<String, Object> context) { + return (OBJ) context.get("object"); + } + +} Propchange: ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/BaseUIExtensionFactory.java ------------------------------------------------------------------------------ svn:eol-style = native Added: ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/DistributionToFeatureAssocExtensionFactory.java URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/DistributionToFeatureAssocExtensionFactory.java?rev=1802386&view=auto ============================================================================== --- ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/DistributionToFeatureAssocExtensionFactory.java (added) +++ ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/DistributionToFeatureAssocExtensionFactory.java Wed Jul 19 13:07:57 2017 @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.ace.webui.vaadin.extension; + +import java.util.stream.Stream; + +import org.apache.ace.client.repository.object.DistributionObject; +import org.apache.ace.client.repository.object.Feature2DistributionAssociation; + +/** + * Provides a UI extension for the details window showing some details on all associations. + */ +public class DistributionToFeatureAssocExtensionFactory extends BaseAssociationExtensionFactory<DistributionObject, Feature2DistributionAssociation> { + + public DistributionToFeatureAssocExtensionFactory() { + super("Features"); + } + + @Override + protected Stream<Feature2DistributionAssociation> getAssocations(DistributionObject dist) { + return dist.getFeatures().stream() + .flatMap(d -> dist.getAssociationsWith(d).stream()); + } +} Propchange: ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/DistributionToFeatureAssocExtensionFactory.java ------------------------------------------------------------------------------ svn:eol-style = native Added: ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/DistributionToTargetAssocExtensionFactory.java URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/DistributionToTargetAssocExtensionFactory.java?rev=1802386&view=auto ============================================================================== --- ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/DistributionToTargetAssocExtensionFactory.java (added) +++ ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/DistributionToTargetAssocExtensionFactory.java Wed Jul 19 13:07:57 2017 @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.ace.webui.vaadin.extension; + +import java.util.stream.Stream; + +import org.apache.ace.client.repository.object.Distribution2TargetAssociation; +import org.apache.ace.client.repository.object.DistributionObject; + +/** + * Provides a UI extension for the details window showing some details on all associations. + */ +public class DistributionToTargetAssocExtensionFactory extends BaseAssociationExtensionFactory<DistributionObject, Distribution2TargetAssociation> { + + public DistributionToTargetAssocExtensionFactory() { + super("Targets"); + } + + @Override + protected Stream<Distribution2TargetAssociation> getAssocations(DistributionObject dist) { + return dist.getTargets().stream() + .flatMap(d -> dist.getAssociationsWith(d).stream()); + } +} Propchange: ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/DistributionToTargetAssocExtensionFactory.java ------------------------------------------------------------------------------ svn:eol-style = native Added: ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/FeatureToArtifactAssocExtensionFactory.java URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/FeatureToArtifactAssocExtensionFactory.java?rev=1802386&view=auto ============================================================================== --- ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/FeatureToArtifactAssocExtensionFactory.java (added) +++ ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/FeatureToArtifactAssocExtensionFactory.java Wed Jul 19 13:07:57 2017 @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.ace.webui.vaadin.extension; + +import java.util.stream.Stream; + +import org.apache.ace.client.repository.object.Artifact2FeatureAssociation; +import org.apache.ace.client.repository.object.FeatureObject; + +/** + * Provides a UI extension for the details window showing some details on all associations. + */ +public class FeatureToArtifactAssocExtensionFactory extends BaseAssociationExtensionFactory<FeatureObject, Artifact2FeatureAssociation> { + + public FeatureToArtifactAssocExtensionFactory() { + super("Artifacts"); + } + + @Override + protected Stream<Artifact2FeatureAssociation> getAssocations(FeatureObject feature) { + return feature.getArtifacts().stream() + .flatMap(a -> feature.getAssociationsWith(a).stream()); + } +} Propchange: ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/FeatureToArtifactAssocExtensionFactory.java ------------------------------------------------------------------------------ svn:eol-style = native Added: ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/FeatureToDistributionAssocExtensionFactory.java URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/FeatureToDistributionAssocExtensionFactory.java?rev=1802386&view=auto ============================================================================== --- ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/FeatureToDistributionAssocExtensionFactory.java (added) +++ ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/FeatureToDistributionAssocExtensionFactory.java Wed Jul 19 13:07:57 2017 @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.ace.webui.vaadin.extension; + +import java.util.stream.Stream; + +import org.apache.ace.client.repository.object.Feature2DistributionAssociation; +import org.apache.ace.client.repository.object.FeatureObject; + +/** + * Provides a UI extension for the details window showing some details on all associations. + */ +public class FeatureToDistributionAssocExtensionFactory extends BaseAssociationExtensionFactory<FeatureObject, Feature2DistributionAssociation> { + + public FeatureToDistributionAssocExtensionFactory() { + super("Distributions"); + } + + @Override + protected Stream<Feature2DistributionAssociation> getAssocations(FeatureObject feature) { + return feature.getDistributions().stream() + .flatMap(d -> feature.getAssociationsWith(d).stream()); + } +} Propchange: ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/FeatureToDistributionAssocExtensionFactory.java ------------------------------------------------------------------------------ svn:eol-style = native Added: ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/TargetInfoExtensionFactory.java URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/TargetInfoExtensionFactory.java?rev=1802386&view=auto ============================================================================== --- ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/TargetInfoExtensionFactory.java (added) +++ ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/TargetInfoExtensionFactory.java Wed Jul 19 13:07:57 2017 @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.ace.webui.vaadin.extension; + +import org.apache.ace.client.repository.stateful.StatefulTargetObject; + +import com.vaadin.ui.Table; + +/** + * Provides a UI extension for the target details window showing some details on a (stateful) target. + */ +public class TargetInfoExtensionFactory extends BaseInfoExtensionFactory<StatefulTargetObject> { + + @Override + protected void addTableRows(Table table, StatefulTargetObject target) { + addItem(table, "Target ID", target.getID()); + addItem(table, "Available version", target.getCurrentVersion()); + addItem(table, "Installed version", (target.getLastInstallVersion() == null ? "(none)" : target.getLastInstallVersion())); + addItem(table, "Registration state", target.getRegistrationState()); + addItem(table, "Approval state", target.getApprovalState()); + addItem(table, "Provisioning state", target.getProvisioningState()); + addItem(table, "Store state", target.getStoreState()); + } +} Propchange: ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/TargetInfoExtensionFactory.java ------------------------------------------------------------------------------ svn:eol-style = native Added: ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/TargetToDistributionAssocExtensionFactory.java URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/TargetToDistributionAssocExtensionFactory.java?rev=1802386&view=auto ============================================================================== --- ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/TargetToDistributionAssocExtensionFactory.java (added) +++ ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/TargetToDistributionAssocExtensionFactory.java Wed Jul 19 13:07:57 2017 @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.ace.webui.vaadin.extension; + +import java.util.stream.Stream; + +import org.apache.ace.client.repository.object.Distribution2TargetAssociation; +import org.apache.ace.client.repository.stateful.StatefulTargetObject; + +/** + * Provides a UI extension for the details window showing some details on all associations. + */ +public class TargetToDistributionAssocExtensionFactory extends BaseAssociationExtensionFactory<StatefulTargetObject, Distribution2TargetAssociation> { + + public TargetToDistributionAssocExtensionFactory() { + super("Distributions"); + } + + @Override + protected Stream<Distribution2TargetAssociation> getAssocations(StatefulTargetObject target) { + return target.getDistributions().stream() + .flatMap(d -> target.getAssociationsWith(d).stream()); + } +} Propchange: ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/extension/TargetToDistributionAssocExtensionFactory.java ------------------------------------------------------------------------------ svn:eol-style = native