소스 검색

Merge branch 'candidate-7.4.x'

Signed-off-by: Richard Chapman <rchapman@hpccsystems.com>
Richard Chapman 6 년 전
부모
커밋
17596c7129

+ 1 - 0
esp/src/eclwatch/GridDetailsWidget.js

@@ -21,6 +21,7 @@ define([
     "dijit/layout/BorderContainer",
     "dijit/Toolbar",
     "dijit/form/Button",
+    "dijit/form/ToggleButton",
     "dijit/ToolbarSeparator",
     "dijit/layout/ContentPane"
 

+ 0 - 4
esp/src/eclwatch/templates/DynamicESDLDefinitionDetailsWidget.html

@@ -2,10 +2,6 @@
     <div id="${id}BorderContainer" class="${baseClass}BorderContainer" style="width: 100%; height: 100%;" data-dojo-type="dijit.layout.BorderContainer">
         <div id="${id}TabContainer" data-dojo-props="region: 'center', tabPosition: 'top'" style="width: 100%; height: 100%" data-dojo-type="dijit.layout.TabContainer">
             <div id="${id}_Summary" style="width: 100%; height: 100%" data-dojo-props="title:'${i18n.XML}'" data-dojo-type="dijit.layout.BorderContainer">
-                <div id="${id}Toolbar" class="topPanel" data-dojo-props="region: 'top'" data-dojo-type="dijit.Toolbar">
-                    <div class="right" data-dojo-attach-event="onChange:_onMaximize" data-dojo-props="iconClass:'iconMaximize', showLabel:false" checked=false data-dojo-type="dijit.form.ToggleButton">${i18n.MaximizeRestore}</div>
-                    <div id="${id}NewPage" class="right" data-dojo-attach-event="onClick:_onNewPage" data-dojo-props="iconClass:'iconNewPage', showLabel:false" data-dojo-type="dijit.form.Button">${i18n.OpenInNewPage}</div>
-                </div>
                 <div id="${id}_XML" data-dojo-props="region: 'center'" data-dojo-type="ECLSourceWidget"></div>
             </div>
         </div>

+ 0 - 3
esp/src/eclwatch/templates/TopologyDetailsWidget.html

@@ -4,9 +4,6 @@
             <div id="${id}_Summary" style="width: 100%; height: 100%" data-dojo-props="title:'${i18n.Summary}', iconClass:'iconWorkunit'" data-dojo-type="dijit.layout.BorderContainer">
                 <div id="${id}Toolbar" class="topPanel" data-dojo-props="region: 'top'" data-dojo-type="dijit.Toolbar">
                     <div id="${id}Refresh" data-dojo-attach-event="onClick:_onRefresh" data-dojo-props="iconClass:'iconRefresh'" data-dojo-type="dijit.form.Button">${i18n.Refresh}</div>
-                    <span data-dojo-type="dijit.ToolbarSeparator"></span>
-                    <div class="right" data-dojo-attach-event="onChange:_onMaximize" data-dojo-props="iconClass:'iconMaximize', showLabel:false" checked=false data-dojo-type="dijit.form.ToggleButton">${i18n.MaximizeRestore}</div>
-                    <div id="${id}NewPage" class="right" data-dojo-attach-event="onClick:_onNewPage" data-dojo-props="iconClass:'iconNewPage', showLabel:false" data-dojo-type="dijit.form.Button">${i18n.OpenInNewPage}</div>
                 </div>
                 <div id="${id}_Details" data-dojo-props="region: 'center'" data-dojo-type="dijit.layout.ContentPane">
                     ${i18n.PleaseSelectATopologyItem}

+ 6 - 2
esp/src/src/ESPUtil.ts

@@ -543,7 +543,7 @@ export function maximizeWidget(widget: any, max: boolean, prev?: IMaximizeState)
             var retVal: IMaximizeState = {
                 parentNode: widget.domNode.parentNode,
                 nextElementSibling: widget.domNode.nextElementSibling,
-                stylePosition: domStyle.set(widget.domNode, "position"),
+                stylePosition: domStyle.get(widget.domNode, "position"),
                 stubResize: stub.resize,
                 widgetResize: widget.resize
             };
@@ -566,7 +566,11 @@ export function maximizeWidget(widget: any, max: boolean, prev?: IMaximizeState)
             widget.resize = prev.widgetResize;
             stub.resize = prev.stubResize;
 
-            prev.parentNode.insertBefore(widget.domNode, prev.nextElementSibling);
+            if (prev.nextElementSibling) {
+                prev.parentNode.insertBefore(widget.domNode, prev.nextElementSibling);
+            } else {
+                prev.parentNode.appendChild(widget.domNode);
+            }
             domStyle.set(widget.domNode, "position", prev.stylePosition);
 
             stub.resize();

+ 38 - 38
fs/dafsserver/dafsserver.cpp

@@ -1119,10 +1119,21 @@ protected:
     bool eofSeen = false;
     const RtlRecord *record = nullptr;
     RowFilter filters;
+    RtlDynRow *filterRow = nullptr;
     // virtual field values
     StringAttr logicalFilename;
     unsigned numInputFields = 0;
 
+    inline bool fieldFilterMatch(const void * buffer)
+    {
+        if (filterRow)
+        {
+            filterRow->setRow(buffer, filters.getNumFieldsRequired());
+            return filters.matches(*filterRow);
+        }
+        else
+            return true;
+    }
 public:
     IMPLEMENT_IINTERFACE_USING(PARENT);
 
@@ -1133,11 +1144,23 @@ public:
             throw createDafsException(DAFSERR_cmdstream_protocol_failure, "CRemoteDiskBaseActivity: fileName missing");
         logicalFilename.set(config.queryProp("virtualFields/logicalFilename"));
     }
+    ~CRemoteDiskBaseActivity()
+    {
+        delete filterRow;
+    }
     void setupInputMeta(const IPropertyTree &config, IOutputMetaData *_inMeta)
     {
         inMeta.setown(_inMeta);
         record = &inMeta->queryRecordAccessor(true);
         numInputFields = record->getNumFields();
+
+        if (config.hasProp("keyFilter"))
+        {
+            filterRow = new RtlDynRow(*record);
+            Owned<IPropertyTreeIterator> filterIter = config.getElements("keyFilter");
+            ForEach(*filterIter)
+                filters.addFilter(*record, filterIter->query().queryProp(nullptr));
+        }
     }
 // IRemoteReadActivity impl.
     virtual unsigned __int64 queryProcessed() const override
@@ -1199,7 +1222,6 @@ protected:
     unsigned __int64 startPos = 0;
     bool compressed = false;
     bool cursorDirty = false;
-    RtlDynRow *filterRow = nullptr;
     // virtual field values
     unsigned partNum = 0;
     offset_t baseFpos = 0;
@@ -1259,16 +1281,6 @@ protected:
         opened = false;
         eofSeen = true;
     }
-    inline bool fieldFilterMatch(const void * buffer)
-    {
-        if (filterRow)
-        {
-            filterRow->setRow(buffer, 0);
-            return filters.matches(*filterRow);
-        }
-        else
-            return true;
-    }
 public:
     CRemoteStreamReadBaseActivity(IPropertyTree &config, IFileDescriptor *fileDesc) : PARENT(config, fileDesc)
     {
@@ -1278,21 +1290,6 @@ public:
         partNum = config.getPropInt("virtualFields/partNum");
         baseFpos = (offset_t)config.getPropInt64("virtualFields/baseFpos");
     }
-    ~CRemoteStreamReadBaseActivity()
-    {
-        delete filterRow;
-    }
-    void setupInputMeta(const IPropertyTree &config, IOutputMetaData *inMeta)
-    {
-        PARENT::setupInputMeta(config, inMeta);
-        if (config.hasProp("keyFilter"))
-        {
-            filterRow = new RtlDynRow(*record);
-            Owned<IPropertyTreeIterator> filterIter = config.getElements("keyFilter");
-            ForEach(*filterIter)
-                filters.addFilter(*record, filterIter->query().queryProp(nullptr));
-        }
-    }
 // IVirtualFieldCallback impl.
     virtual unsigned __int64 getFilePosition(const void * row) override
     {
@@ -2057,20 +2054,23 @@ public:
                 while (keyManager->lookup(true))
                 {
                     const byte *keyRow = keyManager->queryKeyBuffer();
-                    if (translator)
-                        retSz = translator->translate(outBuilder, *this, keyRow);
-                    else
+                    if (fieldFilterMatch(keyRow))
                     {
-                        retSz = keyManager->queryRowSize();
-                        outBuilder.ensureCapacity(retSz, nullptr);
-                        memcpy(outBuilder.getSelf(), keyRow, retSz);
-                    }
-                    dbgassertex(retSz);
+                        if (translator)
+                            retSz = translator->translate(outBuilder, *this, keyRow);
+                        else
+                        {
+                            retSz = keyManager->queryRowSize();
+                            outBuilder.ensureCapacity(retSz, nullptr);
+                            memcpy(outBuilder.getSelf(), keyRow, retSz);
+                        }
+                        dbgassertex(retSz);
 
-                    const void *ret = outBuilder.getSelf();
-                    outBuilder.finishRow(retSz);
-                    ++processed;
-                    return ret;
+                        const void *ret = outBuilder.getSelf();
+                        outBuilder.finishRow(retSz);
+                        ++processed;
+                        return ret;
+                    }
                 }
                 retSz = 0;
             }

+ 13 - 0
initfiles/examples/ResultCompare/organization.esdl

@@ -32,6 +32,18 @@ ESPStruct NameInfo
     ESParray<string, Alias> Aliases;
 };
 
+ESPStruct Date
+{
+    short Year;
+    short Month;
+    short Day;
+};
+
+ESPStruct DateInfo : Date
+{
+    string Descr;
+};
+
 ESPStruct AddressInfo
 {
     ESPenum AddressType type("Home");
@@ -60,6 +72,7 @@ ESPResponse OrganizationInfoResponse
     ESPstruct AddressInfo Address;
     ESParray<ESPstruct PersonInfo, Member> Members;
     ESParray<ESPstruct PersonInfo, Guest> Guests;
+    ESParray<ESPstruct DateInfo, KeyDate> KeyDates;
 };
 
 ESPservice [version("0.01")] Organizations

+ 14 - 0
initfiles/examples/ResultCompare/result1.xml

@@ -99,4 +99,18 @@
       </Addresses>
     </Guest>
   </Guests>
+  <KeyDates>
+    <KeyDate>
+      <Year>2010</Year>
+      <Month>1</Month>
+      <Day>1</Day>
+      <Descr>Founded</Descr>
+    </KeyDate>
+    <KeyDate>
+      <Year>2015</Year>
+      <Month>1</Month>
+      <Day>1</Day>
+      <Descr>Reboot</Descr>
+    </KeyDate>
+  </KeyDates>
 </OrganizationInfoResponse>

+ 14 - 0
initfiles/examples/ResultCompare/result2.xml

@@ -99,5 +99,19 @@
       </Addresses>
     </Guest>
   </Guests>
+  <KeyDates>
+    <KeyDate>
+      <Year>2010</Year>
+      <Month>1</Month>
+      <Day>1</Day>
+      <Descr>Founded</Descr>
+    </KeyDate>
+    <KeyDate>
+      <Year>2015</Year>
+      <Month>1</Month>
+      <Day>1</Day>
+      <Descr>Restructuring</Descr>
+    </KeyDate>
+  </KeyDates>
 </OrganizationInfoResponse>
 

+ 8 - 0
initfiles/examples/ResultCompare/template1.xml

@@ -55,5 +55,13 @@
         </Addresses>
       </Guest>
     </Guests>
+    <KeyDates diff_match="Year+Month+Day+Descr" diff_monitor="KeyDates">
+      <KeyDate>
+        <Year/>
+        <Month/>
+        <Day/>
+        <Descr/>
+      </KeyDate>
+    </KeyDates>
   </OrganizationInfoResponse>
 </ResultMonitoringTemplate>

+ 2 - 0
system/security/shared/SecurityResource.hpp

@@ -132,8 +132,10 @@ public:
         if(!from)
             return;
 
+        setResourceType(from->getResourceType());
         setDescription(from->getDescription());
         setValue(from->getValue());
+        setRequiredAccessFlags(from->getRequiredAccessFlags());
         setAccessFlags(from->getAccessFlags());
 
         // The destination properties are reset to an empty default state so the

+ 18 - 3
tools/esdlcmd/esdlcmd_monitor.cpp

@@ -500,6 +500,22 @@ public:
             }
         }
     }
+    IPropertyTree *findPartElement(IPropertyTree &depTree, IPropertyTree *parent, const char *name)
+    {
+        VStringBuffer xpath("EsdlElement[@name='%s']", name);
+        IPropertyTree *partElement = parent->queryPropTree(xpath);
+        if (partElement)
+            return partElement;
+        const char *base_type = parent->queryProp("@base_type");
+        if (base_type && *base_type)
+        {
+            VStringBuffer baseXPath("EsdlStruct[@name='%s']", base_type);
+            IPropertyTree *structType = depTree.queryPropTree(baseXPath);
+            if (structType)
+                return findPartElement(depTree, structType, name);
+        }
+        return nullptr;
+    }
     void addDiffIdPartToMap(IPropertyTree &depTree, IPropertyTree *parent, IPropertyTree *map, const char *id)
     {
         StringBuffer part;
@@ -519,8 +535,7 @@ public:
         }
         else
         {
-            VStringBuffer xpath("EsdlElement[@name='%s']", part.str());
-            IPropertyTree *partElement = parent->queryPropTree(xpath);
+            IPropertyTree *partElement = findPartElement(depTree, parent, part.str());
             if (!partElement)
             {
                 StringBuffer idpath(id);
@@ -564,7 +579,7 @@ public:
                 }
                 else
                 {
-                    xpath.setf("EsdlStruct[@name='%s']", partElement->queryProp("@complex_type"));
+                    VStringBuffer xpath("EsdlStruct[@name='%s']", partElement->queryProp("@complex_type"));
                     IPropertyTree *structType = depTree.queryPropTree(xpath);
                     if (!structType)
                     {