View Javadoc

1   /**
2    * 
3    */
4   package de.tivsource.page.restore;
5   
6   import java.io.BufferedReader;
7   import java.io.IOException;
8   import java.io.InputStream;
9   import java.io.InputStreamReader;
10  import java.io.UnsupportedEncodingException;
11  import java.security.NoSuchAlgorithmException;
12  import java.text.ParseException;
13  import java.text.SimpleDateFormat;
14  import java.util.ArrayList;
15  import java.util.Date;
16  import java.util.Iterator;
17  import java.util.List;
18  
19  import org.apache.logging.log4j.LogManager;
20  import org.apache.logging.log4j.Logger;
21  
22  import de.tivsource.page.dao.administration.RoleDaoLocal;
23  import de.tivsource.page.dao.administration.UserDaoLocal;
24  import de.tivsource.page.entity.administration.Role;
25  import de.tivsource.page.entity.administration.User;
26  
27  /**
28   * @author Marc Michele
29   *
30   */
31  public class RestoreUser {
32  
33      /**
34       * Statischer Logger der Klasse.
35       */
36      private static final Logger LOGGER = LogManager.getLogger(RestoreUser.class);
37  
38      private UserDaoLocal userDaoLocal;
39  
40      private RoleDaoLocal roleDaoLocal;
41  
42      public RestoreUser(UserDaoLocal userDaoLocal, RoleDaoLocal roleDaoLocal) {
43          super();
44          this.userDaoLocal = userDaoLocal;
45          this.roleDaoLocal = roleDaoLocal;
46      }
47  
48      public void generate(InputStream inputStream) {
49          LOGGER.info("generate(InputStream inputStream) aufgerufen.");
50          cleanup();
51          BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));
52          try {
53              String line = null;
54              while ((line = in.readLine()) != null) {
55                  if (!line.startsWith("[Format Definition]")) {
56                      User user = convert(line);
57                      userDaoLocal.merge(user);
58                  }
59              }
60          } catch (IOException e) {
61              e.printStackTrace();
62          } catch (NoSuchAlgorithmException e) {
63              e.printStackTrace();
64          }
65      }
66  
67      private User convert(String line) throws NoSuchAlgorithmException, UnsupportedEncodingException {
68  
69          // uuid|username|email|firstname|lastname|password|roles|created|modified|modifiedBy|modifiedAddress|
70          // Zerlege CSV-Zeile in String-Array.
71          String[] items = line.split("\\|");
72  
73          // Erstelle Announcement-Objekt
74          User user = new User();
75  
76          user.setUuid(items[0]);
77          user.setUsername(items[1]);
78          user.setEmail(items[2]);
79          user.setFirstname(items[3]);
80          user.setLastname(items[4]);
81          user.setPassword(items[5]);
82  
83          // Erzeuge Role-List.
84          List<Role> roles = new ArrayList<Role>();
85  
86          // Zerlege CSV-String.
87          String[] csvTags = items[6].split(";");
88  
89          // Laufe durch das Array und füge die Tags der Tag-Liste hinzu.
90          for (int i = 0; i < csvTags.length; i++) {
91              roles.add(roleDaoLocal.findByUuid(csvTags[i]));
92          }
93          user.setRoles(roles);
94  
95          // Füge Erstellungsdatum hinzu.
96          user.setCreated(convertDateString(items[7]));
97          user.setModified(convertDateString(items[8]));
98          user.setModifiedBy(items[9]);
99          user.setModifiedAddress(items[10]);
100 
101         
102 
103         return user;
104     }// Ende convert(String line)
105 
106     /**
107      * Methode zum Konvertieren eines Strings des Formates "1970-12-01 23:59:59" in ein Date-Object. 
108      * @param dateString
109      * @return
110      */
111     private Date convertDateString(String dateString) {
112         SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
113         try {
114             return simpleDateFormat.parse(dateString);
115         } catch (ParseException e) {
116             return new Date();
117         }
118     }
119 
120     private void cleanup() {
121         if(userDaoLocal.countAll() > 0) {
122             Iterator<User> userIterator = userDaoLocal.findAll(0, userDaoLocal.countAll()).iterator();
123             while(userIterator.hasNext()) {
124                 User next = userIterator.next();
125                 next.setRoles(null);
126                 userDaoLocal.merge(next);
127                 userDaoLocal.delete(next);
128             }
129         }
130     }// Ende cleanup()
131 
132 }// Ende class