/* * DBeaver - Universal Database Manager * Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org) * * 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 org.jkiss.dbeaver.ext.wmi.model; import org.jkiss.code.Nullable; import org.jkiss.dbeaver.DBException; import org.jkiss.dbeaver.Log; import org.jkiss.dbeaver.model.*; import org.jkiss.dbeaver.model.meta.Property; import org.jkiss.dbeaver.model.struct.DBSEntityAttribute; import org.jkiss.utils.CommonUtils; import org.jkiss.wmi.service.WMIConstants; import org.jkiss.wmi.service.WMIException; import org.jkiss.wmi.service.WMIObjectAttribute; /** * Class property */ public class WMIClassAttribute extends WMIClassElement<WMIObjectAttribute> implements DBSEntityAttribute, DBPImageProvider { private static final Log log = Log.getLog(WMIClassAttribute.class); protected WMIClassAttribute(WMIClass wmiClass, WMIObjectAttribute attribute) { super(wmiClass, attribute); } @Override @Property(viewable = true, order = 10) public String getTypeName() { return element.getTypeName(); } @Override public String getFullTypeName() { return DBUtils.getFullTypeName(this); } @Override public int getTypeID() { return element.getType(); } @Override public DBPDataKind getDataKind() { return getDataKindById(element.getType()); } @Override public int getScale() { return 0; } @Override public int getPrecision() { return 0; } @Override public long getMaxLength() { try { Object maxLengthQ = getQualifiedObject().getQualifier(WMIConstants.Q_MaxLen); if (maxLengthQ instanceof Number) { return ((Number) maxLengthQ).longValue(); } } catch (WMIException e) { log.warn(e); } return 0; } @Override public boolean isRequired() { return false; } @Override public boolean isAutoGenerated() { return false; } @Override public int getOrdinalPosition() { return 0; } public boolean isKey() throws DBException { return getFlagQualifier(WMIConstants.Q_Key) || getFlagQualifier(WMIConstants.Q_CIM_Key); } @Override @Property(viewable = true, order = 20) public String getDefaultValue() { return CommonUtils.toString(element.getValue()); } @Nullable @Override public DBPImage getObjectImage() { return getPropertyImage(element.getType()); } public static DBPImage getPropertyImage(int type) { switch (type) { case WMIConstants.CIM_SINT8: case WMIConstants.CIM_UINT8: case WMIConstants.CIM_SINT16: case WMIConstants.CIM_UINT16: case WMIConstants.CIM_SINT32: case WMIConstants.CIM_UINT32: case WMIConstants.CIM_SINT64: case WMIConstants.CIM_UINT64: case WMIConstants.CIM_REAL32: case WMIConstants.CIM_REAL64: return DBIcon.TYPE_NUMBER; case WMIConstants.CIM_BOOLEAN: return DBIcon.TYPE_BOOLEAN; case WMIConstants.CIM_STRING: case WMIConstants.CIM_CHAR16: return DBIcon.TYPE_STRING; case WMIConstants.CIM_DATETIME: return DBIcon.TYPE_DATETIME; default: return DBIcon.TYPE_UNKNOWN; } } public static DBPDataKind getDataKindById(int type) { switch (type) { case WMIConstants.CIM_SINT8: case WMIConstants.CIM_UINT8: case WMIConstants.CIM_SINT16: case WMIConstants.CIM_UINT16: case WMIConstants.CIM_SINT32: case WMIConstants.CIM_UINT32: case WMIConstants.CIM_SINT64: case WMIConstants.CIM_UINT64: case WMIConstants.CIM_REAL32: case WMIConstants.CIM_REAL64: return DBPDataKind.NUMERIC; case WMIConstants.CIM_BOOLEAN: return DBPDataKind.BOOLEAN; case WMIConstants.CIM_STRING: case WMIConstants.CIM_CHAR16: return DBPDataKind.STRING; case WMIConstants.CIM_DATETIME: return DBPDataKind.DATETIME; default: return DBPDataKind.OBJECT; } } }