Search code examples
springspring-mvcproperty-placeholderapplication.properties

How to select several properties for specific name


I am working on a web project using Spring and Spring MVC.

I have a feature that is the same for 3 different elements (which are available in dropdown in view). Only two parameters change for each item. I decided to put these elements and parameters in a .properties file to permit the user change them. So for example in my .properties I have the following:

FC
fcUuid=11111111111111111
fcTag=tag1

AC
itUuid=22222222222222222
itTag=tag2

IT
acUuid=333333333333333333
acTag=tag3

For the moment I am able to retrieve each element separately.

For example:

 String communityUuid = SpringPropertiesUtil.getProperty("fcUuid");

(SpringPropertiesUtil extends PropertyPlaceholderConfigurer)

But my question is: how can I retrieve all the parameters relative to one element?

For example the user selects "FC", how in my service layer can I retrieve both fcUuid and fcTag parameters?

Of course I can do something like:

 if(param="FC"){
     String communityUuid = SpringPropertiesUtil.getProperty("fcUuid");
     String communityTag = SpringPropertiesUtil.getProperty("fcTag");
 } else if (param="AC"){...}

But I don't want to do that because the user can add elements so I would have to modify the code each time.

I would like something like:

String communityUuid = SpringPropertiesUtil.getProperties(param[0]);
String tagUuid = SpringPropertiesUtil.getProperties(param[1]);

Or even better:

String communityUuid = SpringPropertiesUtil.getProperties(param[uuid]);
String tagUuid = SpringPropertiesUtil.getProperties(param[tag]);

Solution

  • With the help of one of my colleagues I managed to realize that. This is how I proceeded:

    • In my .properties file I changed the data format, now it looks like:

      #FC
      clientApplications[0].name=FC
      clientApplications[0].communityId=00000000000000
      clientApplications[0].tag=tag0
      
      #AC
      clientApplications[1].name=AC
      clientApplications[1].communityId=11111111111111
      clientApplications[1].tag=tag1
      
      etc...
      
    • I created a bean named ClientApplication (FC, AC and IT are applications) with 3 attributes (name, communityId and tag)

    • I created a class named ApplicationStore that stores all the applications present in the propertiesfile in the form of ClientApplication objects and that provides a get method which returns a ClientApplication according to the name of the app.

      @Component("applicationStore")
      public class ApplicationStore {     
      
          private Map<String, ClientApplication> map;
      
          public void put(String key, ClientApplication value) {
              map.put(key, value);
          }
      
          public ClientApplication get(String key) {
              return map.get(key);
          }
      
          public ApplicationStore() {
              int i = 0;
              map = new HashMap<String, ClientApplication>();
      
              while (SpringPropertiesUtil.getProperty("clientApplications[" + i + "].name") != null) {
                  ClientApplication ca = new ClientApplication();
                  ca.setName(SpringPropertiesUtil.getProperty("clientApplications[" + i + "].name"));
                  ca.setCommunityId(SpringPropertiesUtil.getProperty("clientApplications[" + i + "].communityId"));
                  ca.setTag(SpringPropertiesUtil.getProperty("clientApplications[" + i + "].tag"));
      
                  map.put(ca.getName(), ca);
      
                  i++;
              }
          }
      }
      
    • With that I only have to add this to my service layer:

      @Service("aService")
      public class AServiceImpl implements AService {    
          @Autowired
          private ApplicationStore apps;
      
          private String communityUuid;
          private String communityTag;
      
          @Override
          public void aMethod(String appName) trhows Exception {
              ClientApplication ca = new ClientApplication();
              ca = apps.get(appName);
              communityUuid = ca.getCommunityId();
              communityTag = ca.getTag();
      
              System.out.println("Application for key " + app + " : " + ca);
              System.out.println("communityUuid: " + communityUuid);
              System.out.println("communityTag:" + communityTag);
          }
      }