diff options
31 files changed, 127 insertions, 112 deletions
diff --git a/sdnr/wt/devicemanager-o-ran-sc/o-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/ORanNetworkElement.java b/sdnr/wt/devicemanager-o-ran-sc/o-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/ORanNetworkElement.java index 05f1e6dd5..d3ae5014e 100644 --- a/sdnr/wt/devicemanager-o-ran-sc/o-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/ORanNetworkElement.java +++ b/sdnr/wt/devicemanager-o-ran-sc/o-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/ORanNetworkElement.java @@ -141,6 +141,7 @@ public class ORanNetworkElement implements NetworkElement { if (oRanFaultListenerRegistrationResult != null) { this.oRanFaultListenerRegistrationResult.close(); } ; + databaseService.clearGuiCutThroughEntriesOfNode(getMountpointId()); } @Override diff --git a/sdnr/wt/mountpoint-registrar/installer/pom.xml b/sdnr/wt/mountpoint-registrar/installer/pom.xml index 34a70bb77..d1ee3fbb0 100755 --- a/sdnr/wt/mountpoint-registrar/installer/pom.xml +++ b/sdnr/wt/mountpoint-registrar/installer/pom.xml @@ -47,7 +47,7 @@ <dependencies> <dependency> - <groupId>org.onap.ccsdk.features.sdnr.wt</groupId> + <groupId>${project.groupId}</groupId> <artifactId>${application.name}-feature</artifactId> <version>${project.version}</version> <type>xml</type> @@ -60,7 +60,7 @@ </exclusions> </dependency> <dependency> - <groupId>org.onap.ccsdk.features.sdnr.wt</groupId> + <groupId>${project.groupId}</groupId> <artifactId>${application.name}-provider</artifactId> <version>${project.version}</version> </dependency> diff --git a/sdnr/wt/mountpoint-registrar/provider/pom.xml b/sdnr/wt/mountpoint-registrar/provider/pom.xml index 4a6a3f021..69af460f8 100644 --- a/sdnr/wt/mountpoint-registrar/provider/pom.xml +++ b/sdnr/wt/mountpoint-registrar/provider/pom.xml @@ -30,7 +30,7 @@ <groupId>org.onap.ccsdk.parent</groupId> <artifactId>binding-parent</artifactId> <version>2.2.0-SNAPSHOT</version> - <relativePath/> + <relativePath /> </parent> <groupId>org.onap.ccsdk.features.sdnr.wt</groupId> @@ -66,7 +66,7 @@ <version>${project.version}</version> </dependency> <dependency> - <groupId>org.onap.ccsdk.features.sdnr.wt</groupId> + <groupId>${project.groupId}</groupId> <artifactId>sdnr-wt-common</artifactId> <version>${project.version}</version> <scope>provided</scope> @@ -106,13 +106,13 @@ <artifactId>dmaapClient</artifactId> </dependency> <dependency> - <groupId>org.onap.ccsdk.features.sdnr.wt</groupId> + <groupId>${project.groupId}</groupId> <artifactId>sdnr-wt-data-provider-model</artifactId> <version>${project.version}</version> <scope>provided</scope> </dependency> <dependency> - <groupId>org.onap.ccsdk.features.sdnr.wt</groupId> + <groupId>${project.groupId}</groupId> <artifactId>sdnr-wt-devicemanager-core-model</artifactId> <version>${project.version}</version> <scope>provided</scope> diff --git a/sdnr/wt/mountpoint-registrar/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/mountpointregistrar/impl/DMaaPFaultVESMsgConsumer.java b/sdnr/wt/mountpoint-registrar/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/mountpointregistrar/impl/DMaaPFaultVESMsgConsumer.java index ec5198012..6daeb493d 100644 --- a/sdnr/wt/mountpoint-registrar/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/mountpointregistrar/impl/DMaaPFaultVESMsgConsumer.java +++ b/sdnr/wt/mountpoint-registrar/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/mountpointregistrar/impl/DMaaPFaultVESMsgConsumer.java @@ -49,19 +49,29 @@ public class DMaaPFaultVESMsgConsumer extends DMaaPVESMsgConsumerImpl { String faultSeverity; String vesDomain; int faultSequence; + String reportingEntityName; ObjectMapper oMapper = new ObjectMapper(); JsonNode dmaapMessageRootNode; LOG.info("Fault VES Message is - {}", msg); try { dmaapMessageRootNode = oMapper.readTree(msg); + reportingEntityName = dmaapMessageRootNode.at("/event/commonEventHeader/reportingEntityName").textValue(); + if (reportingEntityName.equals("ONAP SDN-R")) { + LOG.info( + "VES PNF Registration message generated by SDNR, hence no need to process any further; Ignoring the received message"); + return; + } + vesDomain = dmaapMessageRootNode.at("/event/commonEventHeader/domain").textValue(); if (!vesDomain.equalsIgnoreCase("fault")) { LOG.warn("Received {} domain VES Message in DMaaP Fault topic, ignoring it", vesDomain); return; } faultNodeId = dmaapMessageRootNode.at("/event/commonEventHeader/sourceName").textValue(); - faultOccurrenceTime = Instant.ofEpochMilli(dmaapMessageRootNode.at("/event/commonEventHeader/startEpochMicrosec").longValue()/1000) + faultOccurrenceTime = Instant + .ofEpochMilli( + dmaapMessageRootNode.at("/event/commonEventHeader/startEpochMicrosec").longValue() / 1000) .atZone(ZoneId.of("Z")).toString(); faultObjectId = dmaapMessageRootNode.at("/event/faultFields/alarmInterfaceA").textValue(); faultReason = dmaapMessageRootNode.at("/event/faultFields/specificProblem").textValue(); diff --git a/sdnr/wt/mountpoint-registrar/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/mountpointregistrar/impl/DMaaPPNFRegVESMsgConsumer.java b/sdnr/wt/mountpoint-registrar/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/mountpointregistrar/impl/DMaaPPNFRegVESMsgConsumer.java index 1d70077b9..1d95ea522 100644 --- a/sdnr/wt/mountpoint-registrar/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/mountpointregistrar/impl/DMaaPPNFRegVESMsgConsumer.java +++ b/sdnr/wt/mountpoint-registrar/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/mountpointregistrar/impl/DMaaPPNFRegVESMsgConsumer.java @@ -44,7 +44,6 @@ public class DMaaPPNFRegVESMsgConsumer extends DMaaPVESMsgConsumerImpl { @Override public void processMsg(String msg) { LOG.debug("Message from DMaaP topic is - {} ", msg); - @Nullable String pnfId; String pnfIPAddress; @Nullable @@ -57,10 +56,18 @@ public class DMaaPPNFRegVESMsgConsumer extends DMaaPVESMsgConsumerImpl { String pnfUsername; @Nullable String pnfPasswd = null; + String reportingEntityName; ObjectMapper oMapper = new ObjectMapper(); JsonNode dmaapMessageRootNode; try { dmaapMessageRootNode = oMapper.readTree(msg); + reportingEntityName = dmaapMessageRootNode.at("/event/commonEventHeader/reportingEntityName").textValue(); + if (reportingEntityName.equals("ONAP SDN-R")) { + LOG.info( + "VES PNF Registration message generated by SDNR, hence no need to process any further; Ignoring the received message"); + return; + } + pnfId = dmaapMessageRootNode.at("/event/commonEventHeader/sourceName").textValue(); pnfIPAddress = getPNFIPAddress(dmaapMessageRootNode); pnfCommProtocol = diff --git a/sdnr/wt/netconfnode-state-service/installer/pom.xml b/sdnr/wt/netconfnode-state-service/installer/pom.xml index 5a066fdd6..f2ed1ce23 100755 --- a/sdnr/wt/netconfnode-state-service/installer/pom.xml +++ b/sdnr/wt/netconfnode-state-service/installer/pom.xml @@ -47,7 +47,7 @@ <dependencies> <dependency> - <groupId>org.onap.ccsdk.features.sdnr.wt</groupId> + <groupId>${project.groupId}</groupId> <artifactId>${application.name}-feature</artifactId> <version>${project.version}</version> <type>xml</type> @@ -60,7 +60,7 @@ </exclusions> </dependency> <dependency> - <groupId>org.onap.ccsdk.features.sdnr.wt</groupId> + <groupId>${project.groupId}</groupId> <artifactId>${application.name}-provider</artifactId> <version>${project.version}</version> </dependency> diff --git a/sdnr/wt/netconfnode-state-service/model/pom.xml b/sdnr/wt/netconfnode-state-service/model/pom.xml index 69f38ed9f..731578d67 100644 --- a/sdnr/wt/netconfnode-state-service/model/pom.xml +++ b/sdnr/wt/netconfnode-state-service/model/pom.xml @@ -62,7 +62,7 @@ <scope>provided</scope> </dependency> <dependency> - <groupId>org.onap.ccsdk.features.sdnr.wt</groupId> + <groupId>${project.groupId}</groupId> <artifactId>sdnr-wt-data-provider-model</artifactId> <version>${project.version}</version> </dependency> diff --git a/sdnr/wt/netconfnode-state-service/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/netconfnodestateservice/Capabilities.java b/sdnr/wt/netconfnode-state-service/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/netconfnodestateservice/Capabilities.java index 9c24b8b4b..f12c53a4d 100644 --- a/sdnr/wt/netconfnode-state-service/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/netconfnodestateservice/Capabilities.java +++ b/sdnr/wt/netconfnode-state-service/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/netconfnodestateservice/Capabilities.java @@ -21,20 +21,18 @@ */ package org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.Optional; import javax.annotation.Nullable; -import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode; import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.AvailableCapabilities; import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.UnavailableCapabilities; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.available.capabilities.AvailableCapability; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.unavailable.capabilities.UnavailableCapability; import org.opendaylight.yangtools.yang.common.QName; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -48,14 +46,12 @@ public class Capabilities { private static final Logger LOG = LoggerFactory.getLogger(Capabilities.class); - private static final String METHODNAME = "getCapability"; private static final String UNSUPPORTED = "Unsupported"; private final List<String> capabilities = new ArrayList<>(); private final DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); private Capabilities() {} - @SuppressWarnings("null") public static Capabilities getAvailableCapabilities(@Nullable NetconfNode nnode) { LOG.info("GetAvailableCapabilities for node"); Capabilities capabilities = new Capabilities(); @@ -72,14 +68,13 @@ public class Capabilities { return capabilities; } - @SuppressWarnings("null") public static Capabilities getUnavailableCapabilities(NetconfNode nnode) { LOG.info("GetUnavailableCapabilities for node"); Capabilities capabilities = new Capabilities(); if (nnode != null) { UnavailableCapabilities availableCapabilites = nnode.getUnavailableCapabilities(); if (availableCapabilites != null) { - capabilities.constructor(availableCapabilites.getUnavailableCapability()); + capabilities.constructor2(availableCapabilites.getUnavailableCapability()); } else { LOG.debug("empty capabilites"); } @@ -93,30 +88,20 @@ public class Capabilities { /** * Does all construction steps * - * @param pcapabilities with a list of capabilities. <br> - * Type could be <br> - * - Boron: List<code><String></code> <br> - * - Carbon: List<AvailableCapability> + * @param pcapabilities with a list of capabilities. */ - private void constructor(List<@NonNull ?> pcapabilities) { + private void constructor(List<AvailableCapability> pcapabilities) { if (pcapabilities != null) { - Method methodGetCapability; - - for (Object capability : pcapabilities) { - if (capability instanceof String) { // ODL Boron specific - this.capabilities.add((String) capability); - } else { // Carbon specific part .. handled via generics - try { - methodGetCapability = capability.getClass().getDeclaredMethod(METHODNAME); - methodGetCapability.setAccessible(true); - this.capabilities.add(methodGetCapability.invoke(capability).toString()); - } catch (NoSuchMethodException | SecurityException | IllegalAccessException - | IllegalArgumentException | InvocationTargetException e) { - LOG.warn("Capability class with missing interface method {}: {} {} {}", METHODNAME, - e.getMessage(), capability.getClass(), - Arrays.toString(capability.getClass().getInterfaces())); - } - } + for (AvailableCapability capability : pcapabilities) { + this.capabilities.add(capability.getCapability()); + } + } + } + + private void constructor2(List<UnavailableCapability> pcapabilities) { + if (pcapabilities != null) { + for (UnavailableCapability capability : pcapabilities) { + this.capabilities.add(capability.getCapability()); } } } @@ -132,6 +117,7 @@ public class Capabilities { /** * Verify if the namespace is supported + * * @param qCapability from model * @return true if namespace is supported */ @@ -142,6 +128,7 @@ public class Capabilities { /** * Verify if the namespace is supported + * * @param namespace * @return */ @@ -151,12 +138,12 @@ public class Capabilities { /** * check if the namespace and its revision are supported by the given capabilities + * * @param qCapability capability from the model * @return true if supporting the model AND revision<br> * false if revision not available or both not found. */ public boolean isSupportingNamespaceAndRevision(QName qCapability) { - String namespace = qCapability.getNamespace().toString(); String revision = getRevisionString(qCapability); return revision == null ? false : isSupportingNamespaceAndRevision(namespace, revision); @@ -170,8 +157,11 @@ public class Capabilities { */ public boolean isSupportingNamespaceAndRevision(String namespace, @Nullable String revision) { LOG.trace("isSupportingNamespaceAndRevision: Model namespace {}?[revision {}]", namespace, revision); + + final String nsAndRev = String.format("%s?revision=%s", namespace, revision); for (String capability : capabilities) { - if (capability.contains(namespace) && (revision == null || capability.contains(revision))) { + //if (capability.contains(namespace) && (revision == null || capability.contains(revision))) { + if (capability.contains(revision != null ? nsAndRev : namespace)) { LOG.trace("Verify true with: {}", capability); return true; } else { @@ -228,11 +218,12 @@ public class Capabilities { /** * Verify if QName namespace is supported by capabilities + * * @param revision result of getRevisionForNamespace() * @return true if namespace is supported. */ static public boolean isNamespaceSupported(String revision) { - return revision != UNSUPPORTED; + return revision != UNSUPPORTED; } @Override diff --git a/sdnr/wt/odlux/apps/configurationApp/src/views/configurationApplication.tsx b/sdnr/wt/odlux/apps/configurationApp/src/views/configurationApplication.tsx index e466dbacc..db426e814 100644 --- a/sdnr/wt/odlux/apps/configurationApp/src/views/configurationApplication.tsx +++ b/sdnr/wt/odlux/apps/configurationApp/src/views/configurationApplication.tsx @@ -588,7 +588,8 @@ class ConfigurationApplicationComponent extends React.Component<ConfigurationApp const addNewElementAction = { icon: AddIcon, - tooltip: 'Add', + tooltip: 'Add', + ariaLabel:'add-element', onClick: () => { navigate("[]"); // empty key means new element }, @@ -597,7 +598,8 @@ class ConfigurationApplicationComponent extends React.Component<ConfigurationApp const addWithApiDocElementAction = { icon: PostAdd, - tooltip: 'Add', + tooltip: 'Add', + ariaLabel:'add-element-via-api-doc', onClick: () => { window.open(apiDocPathCreate, '_blank'); }, diff --git a/sdnr/wt/odlux/apps/connectApp/src/components/connectionStatusLog.tsx b/sdnr/wt/odlux/apps/connectApp/src/components/connectionStatusLog.tsx index 94b4872dd..7d2f96af3 100644 --- a/sdnr/wt/odlux/apps/connectApp/src/components/connectionStatusLog.tsx +++ b/sdnr/wt/odlux/apps/connectApp/src/components/connectionStatusLog.tsx @@ -54,7 +54,7 @@ class ConnectionStatusLogComponent extends React.Component<ConnectionStatusLogCo render(): JSX.Element { const refreshConnectionStatusLogAction = { - icon: Refresh, tooltip: 'Refresh Connection Status Log Table', onClick: () => { + icon: Refresh, tooltip: 'Refresh Connection Status Log Table', ariaLabel:'refresh', onClick: () => { this.setState({ refreshConnectionStatusLogEditorMode: RefreshConnectionStatusLogDialogMode.RefreshConnectionStatusLogTable }); diff --git a/sdnr/wt/odlux/apps/demoApp/pom.xml b/sdnr/wt/odlux/apps/demoApp/pom.xml index dae67b17b..e3f27d5c9 100644 --- a/sdnr/wt/odlux/apps/demoApp/pom.xml +++ b/sdnr/wt/odlux/apps/demoApp/pom.xml @@ -155,10 +155,6 @@ </execution> </executions> </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-jar-plugin</artifactId> - </plugin> </plugins> </build> </project> diff --git a/sdnr/wt/odlux/apps/eventLogApp/src/views/eventLog.tsx b/sdnr/wt/odlux/apps/eventLogApp/src/views/eventLog.tsx index 748c66e51..0308828c9 100644 --- a/sdnr/wt/odlux/apps/eventLogApp/src/views/eventLog.tsx +++ b/sdnr/wt/odlux/apps/eventLogApp/src/views/eventLog.tsx @@ -55,7 +55,7 @@ class EventLogComponent extends React.Component<EventLogComponentProps, EventLog render(): JSX.Element { const refreshEventLogAction = { - icon: Refresh, tooltip: 'Refresh Event log', onClick: () => { + icon: Refresh, tooltip: 'Refresh Event log', ariaLabel:'refresh', onClick: () => { this.setState({ refreshEventLogEditorMode: RefreshEventLogDialogMode.RefreshEventLogTable }); diff --git a/sdnr/wt/odlux/apps/faultApp/src/handlers/faultAppRootHandler.ts b/sdnr/wt/odlux/apps/faultApp/src/handlers/faultAppRootHandler.ts index 46f92fbef..2ab1da2ed 100644 --- a/sdnr/wt/odlux/apps/faultApp/src/handlers/faultAppRootHandler.ts +++ b/sdnr/wt/odlux/apps/faultApp/src/handlers/faultAppRootHandler.ts @@ -30,7 +30,6 @@ import { SetPanelAction } from '../actions/panelChangeActions'; import { IFaultStatus, faultStatusHandler } from './faultStatusHandler'; import { stuckAlarmHandler } from './clearStuckAlarmsHandler'; import { PanelId } from '../models/panelId'; -import { SetPartialUpdatesAction } from '../actions/partialUpdatesAction'; export interface IFaultAppStoreState { currentProblems: ICurrentProblemsState; @@ -38,7 +37,6 @@ export interface IFaultAppStoreState { alarmLogEntries: IAlarmLogEntriesState; currentOpenPanel: PanelId | null; faultStatus: IFaultStatus; - listenForPartialUpdates: boolean; } const currentOpenPanelHandler: IActionHandler<PanelId | null> = (state = null, action) => { @@ -48,13 +46,6 @@ const currentOpenPanelHandler: IActionHandler<PanelId | null> = (state = null, a return state; } -const arePartialUpdatesActiveHandler: IActionHandler<boolean> = (state = false, action) => { - if (action instanceof SetPartialUpdatesAction) { - state = action.isActive; - } - return state; -} - declare module '../../../../framework/src/store/applicationStore' { interface IApplicationStoreState { fault: IFaultAppStoreState; @@ -67,7 +58,6 @@ const actionHandlers = { alarmLogEntries: alarmLogEntriesActionHandler, currentOpenPanel: currentOpenPanelHandler, faultStatus: faultStatusHandler, - listenForPartialUpdates: arePartialUpdatesActiveHandler }; export const faultAppRootHandler = combineActionHandler<IFaultAppStoreState>(actionHandlers); diff --git a/sdnr/wt/odlux/apps/faultApp/src/pluginFault.tsx b/sdnr/wt/odlux/apps/faultApp/src/pluginFault.tsx index 06299417d..3715c623e 100644 --- a/sdnr/wt/odlux/apps/faultApp/src/pluginFault.tsx +++ b/sdnr/wt/odlux/apps/faultApp/src/pluginFault.tsx @@ -140,6 +140,7 @@ export function register() { applicationApi.applicationStoreInitialized.then(store => { store.dispatch(refreshFaultStatusAsyncAction); }); + window.setInterval(() => { applicationApi.applicationStoreInitialized.then(store => { store.dispatch(refreshFaultStatusAsyncAction); diff --git a/sdnr/wt/odlux/apps/faultApp/src/views/faultApplication.tsx b/sdnr/wt/odlux/apps/faultApp/src/views/faultApplication.tsx index 7b0c23693..0fc7b390e 100644 --- a/sdnr/wt/odlux/apps/faultApp/src/views/faultApplication.tsx +++ b/sdnr/wt/odlux/apps/faultApp/src/views/faultApplication.tsx @@ -41,7 +41,6 @@ import Refresh from '@material-ui/icons/Refresh'; import ClearStuckAlarmsDialog, { ClearStuckAlarmsDialogMode } from '../components/clearStuckAlarmsDialog'; import RefreshAlarmLogDialog, { RefreshAlarmLogDialogMode } from '../components/refreshAlarmLogDialog'; import RefreshCurrentProblemsDialog, { RefreshCurrentProblemsDialogMode } from '../components/refreshCurrentProblemsDialog'; -import { SetPartialUpdatesAction } from '../actions/partialUpdatesAction'; const mapProps = (state: IApplicationStoreState) => ({ panelId: state.fault.currentOpenPanel, @@ -58,7 +57,6 @@ const mapDisp = (dispatcher: IDispatcher) => ({ switchActivePanel: (panelId: PanelId) => { dispatcher.dispatch(setPanelAction(panelId)); }, - setPartialUpdates: (active: boolean) => dispatcher.dispatch(new SetPartialUpdatesAction(active)) }); type FaultApplicationComponentProps = RouteComponentProps & Connect<typeof mapProps, typeof mapDisp>; @@ -138,11 +136,11 @@ class FaultApplicationComponent extends React.Component<FaultApplicationComponen render(): JSX.Element { const clearAlarmsAction = { - icon: Sync, tooltip: 'Clear stuck alarms', onClick: this.onDialogOpen + icon: Sync, tooltip: 'Clear stuck alarms', ariaLabel:'clear-stuck-alarms', onClick: this.onDialogOpen }; const refreshCurrentProblemsAction = { - icon: Refresh, tooltip: 'Refresh Current Problems List', onClick: () => { + icon: Refresh, tooltip: 'Refresh Current Problems List', ariaLabel:'refresh', onClick: () => { this.setState({ refreshCurrentProblemsEditorMode: RefreshCurrentProblemsDialogMode.RefreshCurrentProblemsTable }); @@ -150,7 +148,7 @@ class FaultApplicationComponent extends React.Component<FaultApplicationComponen }; const refreshAlarmLogAction = { - icon: Refresh, tooltip: 'Refresh Alarm log table', onClick: () => { + icon: Refresh, tooltip: 'Refresh Alarm log table', ariaLabel:'refresh', onClick: () => { this.setState({ refreshAlarmLogEditorMode: RefreshAlarmLogDialogMode.RefreshAlarmLogTable }); @@ -230,15 +228,12 @@ class FaultApplicationComponent extends React.Component<FaultApplicationComponen }; - componentWillUnmount() { - this.props.setPartialUpdates(false); - } - public componentDidMount() { if (this.props.panelId === null) { //set default tab if none is set this.onToggleTabs("CurrentProblem"); + }else{ + this.onToggleTabs(this.props.panelId); } - this.props.setPartialUpdates(true); } private renderIcon = (props: { rowData: Fault | FaultAlarmNotification }) => { diff --git a/sdnr/wt/odlux/apps/inventoryApp/src/views/dashboard.tsx b/sdnr/wt/odlux/apps/inventoryApp/src/views/dashboard.tsx index b672dc336..0a1bea0f1 100644 --- a/sdnr/wt/odlux/apps/inventoryApp/src/views/dashboard.tsx +++ b/sdnr/wt/odlux/apps/inventoryApp/src/views/dashboard.tsx @@ -124,7 +124,7 @@ class DashboardSelectorComponent extends React.Component<DashboardComponentProps render() { const refreshInventoryAction = { - icon: Refresh, tooltip: 'Refresh Inventory', onClick: () => { + icon: Refresh, tooltip: 'Refresh Inventory', ariaLabel: 'refresh', onClick: () => { this.setState({ refreshInventoryEditorMode: RefreshInventoryDialogMode.RefreshInventoryTable }); diff --git a/sdnr/wt/odlux/apps/maintenanceApp/src/views/maintenenceView.tsx b/sdnr/wt/odlux/apps/maintenanceApp/src/views/maintenenceView.tsx index 6b5071d90..0be28b748 100644 --- a/sdnr/wt/odlux/apps/maintenanceApp/src/views/maintenenceView.tsx +++ b/sdnr/wt/odlux/apps/maintenanceApp/src/views/maintenenceView.tsx @@ -113,7 +113,7 @@ class MaintenenceViewComponent extends React.Component<MaintenenceViewComponentP render() { const { classes } = this.props; const addMaintenenceEntryAction = { - icon: AddIcon, tooltip: 'Add', onClick: () => { + icon: AddIcon, tooltip: 'Add', ariaLabel:'add-element', onClick: () => { const startTime = (new Date().valueOf()); const endTime = startTime; this.setState({ @@ -128,7 +128,7 @@ class MaintenenceViewComponent extends React.Component<MaintenenceViewComponentP }; const refreshMaintenanceEntriesAction = { - icon: Refresh, tooltip: 'Refresh Maintenance Entries', onClick: () => { + icon: Refresh, tooltip: 'Refresh Maintenance Entries', ariaLabel: 'refresh', onClick: () => { this.setState({ refreshMaintenenceEntriesEditorMode: RefreshMaintenanceEntriesDialogMode.RefreshMaintenanceEntriesTable }); diff --git a/sdnr/wt/odlux/apps/mediatorApp/src/views/mediatorApplication.tsx b/sdnr/wt/odlux/apps/mediatorApp/src/views/mediatorApplication.tsx index f96223297..fbf6d5774 100644 --- a/sdnr/wt/odlux/apps/mediatorApp/src/views/mediatorApplication.tsx +++ b/sdnr/wt/odlux/apps/mediatorApp/src/views/mediatorApplication.tsx @@ -151,7 +151,7 @@ class MediatorApplicationComponent extends React.Component<MediatorApplicationCo </> ); - const addMediatorConfigAction = { icon: AddIcon, tooltip: 'Add', onClick: this.onOpenAddConfigurationDialog }; + const addMediatorConfigAction = { icon: AddIcon, tooltip: 'Add', ariaLabel: 'add-element', onClick: this.onOpenAddConfigurationDialog }; return ( <div className={classes.root}> diff --git a/sdnr/wt/odlux/apps/mediatorApp/src/views/mediatorServerSelection.tsx b/sdnr/wt/odlux/apps/mediatorApp/src/views/mediatorServerSelection.tsx index 0f4ebbe0b..be1ecc718 100644 --- a/sdnr/wt/odlux/apps/mediatorApp/src/views/mediatorServerSelection.tsx +++ b/sdnr/wt/odlux/apps/mediatorApp/src/views/mediatorServerSelection.tsx @@ -90,7 +90,7 @@ class MediatorServerSelectionComponent extends React.Component<MediatorServerSel render() { const { classes } = this.props; const refreshMediatorAction = { - icon: Refresh, tooltip: 'Refresh Mediator Server Table', onClick: () => { + icon: Refresh, tooltip: 'Refresh Mediator Server Table', ariaLabel:'refresh', onClick: () => { this.setState({ refreshMediatorEditorMode: RefreshMediatorDialogMode.RefreshMediatorTable }); @@ -98,7 +98,7 @@ class MediatorServerSelectionComponent extends React.Component<MediatorServerSel }; const addMediatorServerActionButton = { - icon: AddIcon, tooltip: 'Add', onClick: () => { + icon: AddIcon, tooltip: 'Add', ariaLabel:'add-element', onClick: () => { this.setState({ mediatorServerEditorMode: EditMediatorServerDialogMode.AddMediatorServer, mediatorServerToEdit: emptyMediatorServer, diff --git a/sdnr/wt/odlux/apps/performanceHistoryApp/src/components/performanceData.tsx b/sdnr/wt/odlux/apps/performanceHistoryApp/src/components/performanceData.tsx index 62090245a..6a06ea351 100644 --- a/sdnr/wt/odlux/apps/performanceHistoryApp/src/components/performanceData.tsx +++ b/sdnr/wt/odlux/apps/performanceHistoryApp/src/components/performanceData.tsx @@ -85,7 +85,7 @@ class PerformanceDataComponent extends React.Component<PerformanceDataComponentP <> <ToggleContainer onToggleFilterButton={() => this.props.toggleFilterButton(!this.props.isFilterVisible)} existingFilter={this.props.existingFilter} onFilterChanged={this.onFilterChanged} selectedValue={this.props.currentView} showFilter={this.props.isFilterVisible} onChange={this.props.setSubView}> {lineChart(chartPagedData)} - <PerformanceDataTable stickyHeader idProperty={"_id"} tableId="perfromance-data-table" columns={performanceColumns} {...properties} {...actions} /> + <PerformanceDataTable stickyHeader idProperty={"_id"} tableId="performance-data-table" columns={performanceColumns} {...properties} {...actions} /> </ToggleContainer> </> ); diff --git a/sdnr/wt/odlux/apps/performanceHistoryApp/src/views/performanceHistoryApplication.tsx b/sdnr/wt/odlux/apps/performanceHistoryApp/src/views/performanceHistoryApplication.tsx index a0df93fe1..b0fd54c42 100644 --- a/sdnr/wt/odlux/apps/performanceHistoryApp/src/views/performanceHistoryApplication.tsx +++ b/sdnr/wt/odlux/apps/performanceHistoryApp/src/views/performanceHistoryApplication.tsx @@ -251,7 +251,7 @@ class PerformanceHistoryComponent extends React.Component<PerformanceHistoryComp <Tab label="Transmission Power" value="TransmissionPower" aria-label="transmission-power" /> <Tab label="Adaptive Modulation" value="AdaptiveModulation" aria-label="adaptive-modulation" /> <Tab label="Temperature" value="Temperature" aria-label="temperature" /> - <Tab label="Signal-to-interference-plus-noise ratio (SINR)" value="SINR" aria-label="snir" /> + <Tab label="Signal-to-interference-plus-noise ratio (SINR)" value="SINR" aria-label="sinr" /> <Tab label="Cross Polar Discrimination" value="CPD" aria-label="cross-polar-discrimination" /> </Tabs> </AppBar> diff --git a/sdnr/wt/odlux/framework/pom.xml b/sdnr/wt/odlux/framework/pom.xml index 3e947539f..0e6b3cf7f 100644 --- a/sdnr/wt/odlux/framework/pom.xml +++ b/sdnr/wt/odlux/framework/pom.xml @@ -46,7 +46,7 @@ <properties> <buildtime>${maven.build.timestamp}</buildtime> <distversion>ONAP Frankfurt (Neon, mdsal ${odl.mdsal.version})</distversion> - <buildno>110.0d5d064(21/07/05)</buildno> + <buildno>115.f8b3b3c(21/07/30)</buildno> <odlux.version>ONAP SDN-R | ONF Wireless for ${distversion} - Build: ${buildtime} ${buildno} ${project.version}</odlux.version> </properties> diff --git a/sdnr/wt/odlux/framework/src/app.tsx b/sdnr/wt/odlux/framework/src/app.tsx index 7e162cd51..ada78b90f 100644 --- a/sdnr/wt/odlux/framework/src/app.tsx +++ b/sdnr/wt/odlux/framework/src/app.tsx @@ -105,4 +105,3 @@ export const runApplication = () => { };
-
diff --git a/sdnr/wt/odlux/framework/src/components/errorDisplay.tsx b/sdnr/wt/odlux/framework/src/components/errorDisplay.tsx index 1060d4b6d..b2a1f1f20 100644 --- a/sdnr/wt/odlux/framework/src/components/errorDisplay.tsx +++ b/sdnr/wt/odlux/framework/src/components/errorDisplay.tsx @@ -82,6 +82,7 @@ class ErrorDisplayComponent extends React.Component<ErrorDisplayProps> { render(): JSX.Element { const { classes, state } = this.props; const errorInfo = state.framework.applicationState.errors.length && state.framework.applicationState.errors[state.framework.applicationState.errors.length - 1]; + return ( <Modal className={classes.modal} aria-labelledby="simple-modal-title" diff --git a/sdnr/wt/odlux/framework/src/components/material-table/index.tsx b/sdnr/wt/odlux/framework/src/components/material-table/index.tsx index c74fd1a38..9155f38ec 100644 --- a/sdnr/wt/odlux/framework/src/components/material-table/index.tsx +++ b/sdnr/wt/odlux/framework/src/components/material-table/index.tsx @@ -159,7 +159,7 @@ type MaterialTableComponentBaseProps<TData> = WithStyles<typeof styles> & { enableSelection?: boolean; disableSorting?: boolean; disableFilter?: boolean; - customActionButtons?: { icon: React.ComponentType<SvgIconProps>, tooltip?: string, onClick: () => void, disabled?: boolean }[]; + customActionButtons?: { icon: React.ComponentType<SvgIconProps>, tooltip?: string, ariaLabel: string, onClick: () => void, disabled?: boolean }[]; onHandleClick?(event: React.MouseEvent<HTMLTableRowElement>, rowData: TData): void; createContextMenu?: (row: TData) => React.ReactElement<MenuItemProps | DividerTypeMap<{}, "hr">, React.ComponentType<MenuItemProps | DividerTypeMap<{}, "hr">>>[]; }; @@ -253,8 +253,8 @@ class MaterialTableComponent<TData extends {} = {}> extends React.Component<Mate {rows // may need ordering here .map((entry: TData & { [RowDisabled]?: boolean, [kex: string]: any }, index) => { const entryId = getId(entry); - const isSelected = this.isSelected(entryId); const contextMenu = (this.props.createContextMenu && this.state.contextMenuInfo.index === index && this.props.createContextMenu(entry)) || null; + const isSelected = this.isSelected(entryId) || this.state.contextMenuInfo.index === index; return ( <TableRowExt hover diff --git a/sdnr/wt/odlux/framework/src/components/material-table/tableToolbar.tsx b/sdnr/wt/odlux/framework/src/components/material-table/tableToolbar.tsx index f7de0a062..4ad6422dc 100644 --- a/sdnr/wt/odlux/framework/src/components/material-table/tableToolbar.tsx +++ b/sdnr/wt/odlux/framework/src/components/material-table/tableToolbar.tsx @@ -67,7 +67,7 @@ interface ITableToolbarComponentProps extends WithStyles<typeof styles> { numSelected: number | null; title?: string; tableId?: string; - customActionButtons?: { icon: React.ComponentType<SvgIconProps>, tooltip?: string, onClick: () => void, disabled?: boolean }[]; + customActionButtons?: { icon: React.ComponentType<SvgIconProps>, tooltip?: string, ariaLabel: string, onClick: () => void, disabled?: boolean }[]; onToggleFilter: () => void; onExportToCsv: () => void; } @@ -91,7 +91,7 @@ class TableToolbarComponent extends React.Component<ITableToolbarComponentProps, render() { const { numSelected, classes } = this.props; const open = !!this.state.anchorEl; - const buttonPrefix = this.props.tableId !== undefined ? this.props.tableId + '-' : ''; + const buttonPrefix = this.props.tableId !== undefined ? this.props.tableId : 'table'; return ( <Toolbar className={`${classes.root} ${numSelected && numSelected > 0 ? classes.highlight : ''} `} > <div className={classes.title}> @@ -110,7 +110,7 @@ class TableToolbarComponent extends React.Component<ITableToolbarComponentProps, {this.props.customActionButtons ? this.props.customActionButtons.map((action, ind) => ( <Tooltip key={`custom-action-${ind}`} title={action.tooltip || ''}> - <IconButton disabled={action.disabled} aria-label={buttonPrefix + `custom-action-${ind}`} onClick={() => action.onClick()}> + <IconButton disabled={action.disabled} aria-label={`${buttonPrefix}-${action.ariaLabel}-button`} onClick={() => action.onClick()}> <action.icon /> </IconButton> </Tooltip> @@ -118,20 +118,20 @@ class TableToolbarComponent extends React.Component<ITableToolbarComponentProps, : null} {numSelected && numSelected > 0 ? ( <Tooltip title="Delete"> - <IconButton aria-label={buttonPrefix + "delete"}> + <IconButton aria-label={`${buttonPrefix}-delete-button`}> <DeleteIcon /> </IconButton> </Tooltip> ) : ( <Tooltip title="Filter list"> - <IconButton aria-label={buttonPrefix + "filter-list"} onClick={() => { this.props.onToggleFilter && this.props.onToggleFilter() }}> + <IconButton aria-label={`${buttonPrefix}-filter-list-button`} onClick={() => { this.props.onToggleFilter && this.props.onToggleFilter() }}> <FilterListIcon /> </IconButton> </Tooltip> )} <Tooltip title="Actions"> <IconButton color="inherit" - aria-label={buttonPrefix +"additional-actions-button"} + aria-label={`${buttonPrefix}-additional-actions-button`} aria-owns={open ? 'menu-appbar' : undefined} aria-haspopup="true" onClick={this.handleMenu} > diff --git a/sdnr/wt/odlux/framework/src/components/navigationMenu.tsx b/sdnr/wt/odlux/framework/src/components/navigationMenu.tsx index 437ba1b3a..b65eb29e2 100644 --- a/sdnr/wt/odlux/framework/src/components/navigationMenu.tsx +++ b/sdnr/wt/odlux/framework/src/components/navigationMenu.tsx @@ -87,9 +87,10 @@ const styles = (theme: Theme) => createStyles({ const tabletWidthBreakpoint = 768;
export const NavigationMenu = withStyles(styles)(connect()(({ classes, state, dispatch }: WithStyles<typeof styles> & Connect & Connect) => {
- const { user } = state.framework.authenticationState
- const isOpen = state.framework.applicationState.isMenuOpen
- const closedByUser = state.framework.applicationState.isMenuClosedByUser
+ const { user } = state.framework.authenticationState;
+ const isOpen = state.framework.applicationState.isMenuOpen;
+ const closedByUser = state.framework.applicationState.isMenuClosedByUser;
+ const transportUrl = state.framework.applicationState.transportpceUrl;
const [responsive, setResponsive] = React.useState(false);
@@ -139,20 +140,25 @@ export const NavigationMenu = withStyles(styles)(connect()(({ classes, state, di ) || null;
}) || null;
- const transportPCELink = <ListItemLink
- key={"transportPCE"}
- to={window.localStorage.getItem(transportPCEUrl)!}
- primary={"TransportPCE"}
- icon={<FontAwesomeIcon icon={faProjectDiagram}/>}
- external/>;
-
- const linkFound = menuItems.find(obj=>obj.key === "linkCalculation");
- if(linkFound){
- const index = menuItems.indexOf(linkFound);
- menuItems.splice(index+1,0,transportPCELink);
- }else{
- menuItems.push(transportPCELink);
+ if(transportUrl.length>0){
+
+ const transportPCELink = <ListItemLink
+ key={"transportPCE"}
+ to={transportUrl}
+ primary={"TransportPCE"}
+ icon={<FontAwesomeIcon icon={faProjectDiagram} />}
+ external />;
+
+ const linkFound = menuItems.find(obj => obj.key === "linkCalculation");
+
+ if (linkFound) {
+ const index = menuItems.indexOf(linkFound);
+ menuItems.splice(index + 1, 0, transportPCELink);
+ } else {
+ menuItems.push(transportPCELink);
+ }
}
+
return (
<Drawer
diff --git a/sdnr/wt/odlux/framework/src/handlers/applicationStateHandler.ts b/sdnr/wt/odlux/framework/src/handlers/applicationStateHandler.ts index 6426066f6..61e1334e7 100644 --- a/sdnr/wt/odlux/framework/src/handlers/applicationStateHandler.ts +++ b/sdnr/wt/odlux/framework/src/handlers/applicationStateHandler.ts @@ -50,7 +50,8 @@ export interface IApplicationState { isWebsocketAvailable: boolean | undefined; externalLoginProviders: ExternalLoginProvider[] | null; authentication: "basic"|"oauth", // basic - enablePolicy: boolean // false + enablePolicy: boolean, // false + transportpceUrl : string } const applicationStateInit: IApplicationState = { @@ -63,11 +64,13 @@ const applicationStateInit: IApplicationState = { externalLoginProviders: null, authentication: "basic", enablePolicy: false, + transportpceUrl: "" }; export const configureApplication = (config: ApplicationConfig) => { applicationStateInit.authentication = config.authentication === "oauth" ? "oauth" : "basic"; applicationStateInit.enablePolicy = config.enablePolicy ? true : false; + applicationStateInit.transportpceUrl=config.transportpceUrl == undefined ? "" : config.transportpceUrl; } export const applicationStateHandler: IActionHandler<IApplicationState> = (state = applicationStateInit, action) => { diff --git a/sdnr/wt/odlux/framework/src/models/applicationConfig.ts b/sdnr/wt/odlux/framework/src/models/applicationConfig.ts index 5224840eb..0ae9c266b 100644 --- a/sdnr/wt/odlux/framework/src/models/applicationConfig.ts +++ b/sdnr/wt/odlux/framework/src/models/applicationConfig.ts @@ -1,4 +1,5 @@ export type ApplicationConfig = { authentication: "basic"|"oauth", // basic - enablePolicy: false // false + enablePolicy: false, // false + transportpceUrl? : string };
\ No newline at end of file diff --git a/sdnr/wt/odlux/framework/src/views/home.tsx b/sdnr/wt/odlux/framework/src/views/home.tsx index b5df0526f..0e1d487e3 100644 --- a/sdnr/wt/odlux/framework/src/views/home.tsx +++ b/sdnr/wt/odlux/framework/src/views/home.tsx @@ -91,6 +91,9 @@ class Home extends React.Component<HomeComponentProps> { const connectionStatusOptions = { responsive: true, maintainAspectRatio: false, + animation: { + duration: 0 + }, plugins: { legend: { display: true, @@ -109,6 +112,9 @@ class Home extends React.Component<HomeComponentProps> { const connectionStatusUnavailableOptions = { responsive: true, maintainAspectRatio: false, + animation: { + duration: 0 + }, plugins: { legend: { display: true, @@ -178,6 +184,9 @@ class Home extends React.Component<HomeComponentProps> { const alarmStatusOptions = { responsive: true, maintainAspectRatio: false, + animation: { + duration: 0 + }, plugins: { legend: { display: true, @@ -196,6 +205,9 @@ class Home extends React.Component<HomeComponentProps> { const alarmStatusUnavailableOptions = { responsive: true, maintainAspectRatio: false, + animation: { + duration: 0 + }, plugins: { legend: { display: true, diff --git a/sdnr/wt/odlux/odlux.properties b/sdnr/wt/odlux/odlux.properties index 5e34ec0cd..7a69b8f07 100644 --- a/sdnr/wt/odlux/odlux.properties +++ b/sdnr/wt/odlux/odlux.properties @@ -1,12 +1,12 @@ odlux.framework.buildno=110.0d5d064(21/07/05) -odlux.apps.configurationApp.buildno=96.078ad12(21/03/25) +odlux.apps.configurationApp.buildno=103.10d8f9a(21/05/21) odlux.apps.connectApp.buildno=110.0d5d064(21/07/05) -odlux.apps.eventLogApp.buildno=96.078ad12(21/03/25) +odlux.apps.eventLogApp.buildno=103.10d8f9a(21/05/21) odlux.apps.faultApp.buildno=110.0d5d064(21/07/05) odlux.apps.helpApp.buildno=96.078ad12(21/03/25) odlux.apps.inventoryApp.buildno=108.a60ec28(21/06/11) odlux.apps.linkCalculationApp.buildno=96.078ad12(21/03/25) -odlux.apps.maintenanceApp.buildno=96.078ad12(21/03/25) -odlux.apps.mediatorApp.buildno=96.078ad12(21/03/25) +odlux.apps.maintenanceApp.buildno=103.10d8f9a(21/05/21) +odlux.apps.mediatorApp.buildno=103.10d8f9a(21/05/21) odlux.apps.networkMapApp.buildno=102.acd1c0b(21/05/07) odlux.apps.permanceHistoryApp.buildno=81.1c38886(20/12/04) |