View Javadoc

1   /*
2    *  Versioning:
3    *  $LastChangedDate: 2012-10-15 20:41:00 +0200 (Mo, 15 Okt 2012) $
4    *  $LastChangedRevision: 328 $
5    */
6   package org.jcr_blog.service;
7   
8   import java.text.CharacterIterator;
9   import java.text.SimpleDateFormat;
10  import java.text.StringCharacterIterator;
11  import java.util.Date;
12  
13  /**
14   *
15   * @author Sebastian Prehn <sebastian.prehn@planetswebdesign.de>
16   */
17  public class ResourceHelper {
18  
19      private static final SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmssZ");
20  
21      /*
22       * ResourceNames shall be valid xml localnames, and valid encoded URLs.
23       * So we eliminate all special characters and any whitespace.
24       */
25      private static final char LITERAL_PREFIX_DELIMITER = ':';
26      private static final char LITERAL_LBRACE = '[';
27      private static final char LITERAL_RBRACE = ']';
28      private static final char LITERAL_SLASH = '/';
29      private static final char LITERAL_ASTERISK = '*';
30      private static final char LITERAL_SQUOTE = '\'';
31      private static final char LITERAL_QUOTE = '"';
32      private static final char LITERAL_PIPE = '|';
33      private static final char LITERAL_DOT = '.';
34      private static final char LITERAL_EXSLAMATIONMARK = '!';
35      private static final char LITERAL_QUESTIONMARK = '?';
36      private static final char LITERAL_EQUAL = '=';
37      
38  
39      /**
40       *
41       * @param d
42       * @param name none-empty string
43       * @return
44       */
45      public static String createResourceName(Date d, String name) {
46          assert (name != null);
47          assert (d != null);
48          String str = name.trim().toLowerCase().replaceAll("(\\s)+", "-");
49          str = removeLiterals(str);
50          return new StringBuilder().append(format.format(d)).append('-').append(str).toString();
51      }
52  
53      private static String removeLiterals(String parameter) {
54          final StringBuilder result = new StringBuilder();
55          final StringCharacterIterator iterator = new StringCharacterIterator(parameter);
56          char character = iterator.current();
57          while (character != CharacterIterator.DONE) {
58              switch (character) {
59                  case LITERAL_PREFIX_DELIMITER:
60                  case LITERAL_LBRACE:
61                  case LITERAL_RBRACE:
62                  case LITERAL_SLASH:
63                  case LITERAL_ASTERISK:
64                  case LITERAL_SQUOTE:
65                  case LITERAL_QUOTE:
66                  case LITERAL_PIPE:
67                  case LITERAL_DOT:
68                  case LITERAL_EXSLAMATIONMARK:
69                  case LITERAL_QUESTIONMARK:
70                  case LITERAL_EQUAL:
71                      // skip character
72                      break;
73                  default:
74                      //the char is not a special one
75                      //add it to the result as is
76                      result.append(character);
77              }
78              character = iterator.next();
79          }
80          return result.toString();
81      }
82  }