/* * Copyright 2015 Kevin Herron * * Licensed 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 com.digitalpetri.opcua.stack.core; import java.util.EnumSet; import java.util.Optional; import com.digitalpetri.opcua.stack.core.types.builtin.unsigned.UInteger; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Sets; import static com.digitalpetri.opcua.stack.core.types.builtin.unsigned.Unsigned.uint; public enum AttributeId { NodeId(1), NodeClass(2), BrowseName(3), DisplayName(4), Description(5), WriteMask(6), UserWriteMask(7), IsAbstract(8), Symmetric(9), InverseName(10), ContainsNoLoops(11), EventNotifier(12), Value(13), DataType(14), ValueRank(15), ArrayDimensions(16), AccessLevel(17), UserAccessLevel(18), MinimumSamplingInterval(19), Historizing(20), Executable(21), UserExecutable(22); public static final ImmutableSet<AttributeId> BASE_NODE_ATTRIBUTES = ImmutableSet.copyOf( EnumSet.of( NodeId, NodeClass, BrowseName, DisplayName, Description, WriteMask, UserWriteMask) ); public static final ImmutableSet<AttributeId> DATA_TYPE_NODE_ATTRIBUTES = ImmutableSet.copyOf( Sets.union( BASE_NODE_ATTRIBUTES, EnumSet.of(IsAbstract)) ); public static final ImmutableSet<AttributeId> METHOD_NODE_ATTRIBUTES = ImmutableSet.copyOf( Sets.union( BASE_NODE_ATTRIBUTES, EnumSet.of(Executable, UserExecutable)) ); public static final ImmutableSet<AttributeId> OBJECT_NODE_ATTRIBUTES = ImmutableSet.copyOf( Sets.union( BASE_NODE_ATTRIBUTES, EnumSet.of(EventNotifier)) ); public static final ImmutableSet<AttributeId> OBJECT_TYPE_NODE_ATTRIBUTES = ImmutableSet.copyOf( Sets.union( BASE_NODE_ATTRIBUTES, EnumSet.of(IsAbstract)) ); public static final ImmutableSet<AttributeId> REFERENCE_TYPE_NODE_ATTRIBUTES = ImmutableSet.copyOf( Sets.union( BASE_NODE_ATTRIBUTES, EnumSet.of(IsAbstract, Symmetric, InverseName)) ); public static final ImmutableSet<AttributeId> VARIABLE_NODE_ATTRIBUTES = ImmutableSet.copyOf( Sets.union( BASE_NODE_ATTRIBUTES, EnumSet.of(Value, DataType, ValueRank, ArrayDimensions, AccessLevel, UserAccessLevel, MinimumSamplingInterval, Historizing)) ); public static final ImmutableSet<AttributeId> VARIABLE_TYPE_NODE_ATTRIBUTES = ImmutableSet.copyOf( Sets.union( BASE_NODE_ATTRIBUTES, EnumSet.of(Value, DataType, ValueRank, ArrayDimensions, IsAbstract)) ); public static final ImmutableSet<AttributeId> VIEW_NODE_ATTRIBUTES = ImmutableSet.copyOf( Sets.union( BASE_NODE_ATTRIBUTES, EnumSet.of(ContainsNoLoops, EventNotifier)) ); private final int id; AttributeId(int id) { this.id = id; } public final int id() { return id; } public final UInteger uid() { return uint(id); } public static Optional<AttributeId> from(UInteger attributeId) { return from(attributeId.intValue()); } public static Optional<AttributeId> from(int attributeId) { if (attributeId > 0 && attributeId <= values().length) { return Optional.of(values()[attributeId - 1]); } else { return Optional.empty(); } } /** * @param attributeId the id to test for validity. * @return {@code true} if {@code attributeId} is valid. */ public static boolean isValid(UInteger attributeId) { return from(attributeId).isPresent(); } /** * @param attributeId the id to test for validity. * @return {@code true} if {@code attributeId} is valid. */ public static boolean isValid(int attributeId) { return from(attributeId).isPresent(); } }