cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
Showing results for 
Search instead for 
Did you mean: 

Community Tip - If community subscription notifications are filling up your inbox you can set up a daily digest and get all your notifications in a single email. X

Finding values of global enumerations with Java

dsodling
5-Regular Member

Finding values of global enumerations with Java

All,

 

is there anyone who has managed to find out how to go from a TypeIdentifier to an attribute that uses a Global Enumeration and also retrieve the values for that enumeration? 

 

The closest I've gotten to a suggested solution is what is shown in this support case (CS133237) but it assumes that I have an object from which I can get the values. I would like to be able to start with only the TypeIdentifier or even better just the type id (for instance wt.part.WTPart). 

 

Any ideas?

 

Regards

Daniel Södling

ACCEPTED SOLUTION

Accepted Solutions
dsodling
5-Regular Member
(To:Florent)

Thank you for the suggestion. I couldn't get that exact method to work but it did put me on the right path and I ended up with the following. Note that this collects both global enumerations and legal value lists.

 

 

 public RequestResponse handleRequest() {
        logger.trace("handleRequest()");

        HashMap<String, List<LocalizedValue>> result = new HashMap<>();

        try {

            Locale loc = SessionHelper.getLocale();
            String type = request.getParameter("type");
            WCTypeIdentifier wti = new WCTypeIdentifier(type);
            AttributeTypeIdentifier[] attrs = TypeInstanceHelper.getSoftAttributeTypeIdentifiers(wti);
            Map<AttributeTypeIdentifier, AttributeTypeSummary> summaries = AttributeTypeSummaryHelper.SERVICE.getATS(Arrays.asList(attrs), loc);

            for (AttributeTypeIdentifier ati : attrs) {
                logger.debug("attr: {}", ati.getAttributeName());

                AttributeDefinitionReadView attrDef = TypeDefinitionServiceHelper.service.getAttributeDefView(ati);
                ConstraintDefinitionReadView globalEnumConstraint = EnumerationConstraintHelper.getGlobalEnumeratedValueListConstraint(attrDef);
                EnumerationDefinitionReadView enumDef = globalEnumConstraint != null ? globalEnumConstraint.getEnumDef() : null;
                Map<String, EnumerationEntryReadView> entries = enumDef != null ? enumDef.getAllEnumerationEntries() : null;
                DataSet ds = (DataSet) summaries.get(ati).getLegalValueSet();
                ArrayList<LocalizedValue> values = new ArrayList<>();

                // Collect gloal enumeration entties
                if (entries != null) {
                    for (Map.Entry<String, EnumerationEntryReadView> entry : entries.entrySet()) {
                        EnumerationEntryReadView value = entry.getValue();
                        PropertyValueReadView display = value.getPropertyValueByName("displayName");
                        String localizedDisplay = display.getValueAsString(loc, true);
                        values.add(new LocalizedValue(entry.getKey(), localizedDisplay)); 
                    }
                }

                // Collect legal value list entties
                if (ds != null && ds instanceof DiscreteSet) {
                    DiscreteSet set = (DiscreteSet) ds;
                    for (Object el : set.getElements()) {
                        String strValue = el.toString();
                        values.add(new LocalizedValue(strValue, strValue));
                    }
                }

                if (values.size() > 0) {
                    result.put(ati.getAttributeName(), values);
                }
            }
        } catch (WTException ex) {
            throw new RuntimeException(ex);
        }

        return success(result);
    }

 

 

Thanks again! 

View solution in original post

2 REPLIES 2
Florent
14-Alexandrite
(To:dsodling)

Hi Daniel,

 

Take a look on this helper: com.ptc.core.lwc.client.util.EnumerationConstraintHelper.

There is at least the method getEnumInternalAndDisplayValuesFromConstraints() that might help you.

Florent ROUSSEL
www.4cad.ca
dsodling
5-Regular Member
(To:Florent)

Thank you for the suggestion. I couldn't get that exact method to work but it did put me on the right path and I ended up with the following. Note that this collects both global enumerations and legal value lists.

 

 

 public RequestResponse handleRequest() {
        logger.trace("handleRequest()");

        HashMap<String, List<LocalizedValue>> result = new HashMap<>();

        try {

            Locale loc = SessionHelper.getLocale();
            String type = request.getParameter("type");
            WCTypeIdentifier wti = new WCTypeIdentifier(type);
            AttributeTypeIdentifier[] attrs = TypeInstanceHelper.getSoftAttributeTypeIdentifiers(wti);
            Map<AttributeTypeIdentifier, AttributeTypeSummary> summaries = AttributeTypeSummaryHelper.SERVICE.getATS(Arrays.asList(attrs), loc);

            for (AttributeTypeIdentifier ati : attrs) {
                logger.debug("attr: {}", ati.getAttributeName());

                AttributeDefinitionReadView attrDef = TypeDefinitionServiceHelper.service.getAttributeDefView(ati);
                ConstraintDefinitionReadView globalEnumConstraint = EnumerationConstraintHelper.getGlobalEnumeratedValueListConstraint(attrDef);
                EnumerationDefinitionReadView enumDef = globalEnumConstraint != null ? globalEnumConstraint.getEnumDef() : null;
                Map<String, EnumerationEntryReadView> entries = enumDef != null ? enumDef.getAllEnumerationEntries() : null;
                DataSet ds = (DataSet) summaries.get(ati).getLegalValueSet();
                ArrayList<LocalizedValue> values = new ArrayList<>();

                // Collect gloal enumeration entties
                if (entries != null) {
                    for (Map.Entry<String, EnumerationEntryReadView> entry : entries.entrySet()) {
                        EnumerationEntryReadView value = entry.getValue();
                        PropertyValueReadView display = value.getPropertyValueByName("displayName");
                        String localizedDisplay = display.getValueAsString(loc, true);
                        values.add(new LocalizedValue(entry.getKey(), localizedDisplay)); 
                    }
                }

                // Collect legal value list entties
                if (ds != null && ds instanceof DiscreteSet) {
                    DiscreteSet set = (DiscreteSet) ds;
                    for (Object el : set.getElements()) {
                        String strValue = el.toString();
                        values.add(new LocalizedValue(strValue, strValue));
                    }
                }

                if (values.size() > 0) {
                    result.put(ati.getAttributeName(), values);
                }
            }
        } catch (WTException ex) {
            throw new RuntimeException(ex);
        }

        return success(result);
    }

 

 

Thanks again! 

Announcements
Top Tags