1 package org.musicontroller;
2
3 import java.io.File;
4 import java.io.FileInputStream;
5 import java.io.FileOutputStream;
6 import java.io.IOException;
7 import java.io.InputStream;
8 import java.io.OutputStream;
9 import java.util.Properties;
10
11 import org.apache.log4j.Logger;
12 import org.musicontroller.security.IUser;
13 import org.musicontroller.security.User;
14 import org.musicontroller.service.FileUtils;
15 import org.musicontroller.streaming.StreamMaster;
16
17
18
19
20
21
22 public class UserProperties {
23 private static final Logger log = Logger.getLogger(UserProperties.class);
24
25
26
27
28
29 public static enum CandidateselectorPlayorder {
30 ATRANDOM,INREQUESTORDER
31 }
32
33
34
35
36
37
38 public static Properties loadUserProperties(IUser user) {
39 Properties userProperties = new Properties();
40 InputStream in = null;
41 try {
42 in = new FileInputStream(getUserPropertiesFileName(user));
43 userProperties.load(in);
44 } catch (IOException e) {
45 log.error("Failed to read property file: "+getUserPropertiesFileName(user));
46 } finally {
47 try {
48 if (in!=null) in.close();
49 } catch (IOException e) {
50 log.error("Failed to close property file");
51 }
52 }
53 return userProperties;
54 }
55
56
57
58
59
60 public static void applyProperties(IUser user) {
61 if(user==null) {
62 log.error("Cannot set properties of NULL user.");
63 return;
64 }
65 Properties props = loadUserProperties(user);
66 String playorder = props.getProperty(CandidateselectorPlayorder.class.getName());
67 if(playorder==null) {
68 log.error("Invalid setting (null) for setting "+CandidateselectorPlayorder.class.getName());
69 return;
70 }
71 DJ theDJ = StreamMaster.getDJByUser(user.getId());
72 UserProperties.applyProperties(user, theDJ);
73 }
74
75 public static void applyProperties(IUser user, DJ dj) {
76 if(user==null) {
77 log.error("Cannot apply properties to NULL user.");
78 return;
79 }
80 Properties props = loadUserProperties(user);
81 String playorder = props.getProperty(CandidateselectorPlayorder.class.getName());
82 if(playorder==null) {
83 log.error("Invalid setting (null) for setting "+CandidateselectorPlayorder.class.getName());
84 return;
85 }
86 if(dj==null) {
87 log.error("User "+user.getName()+" does not have a DJ. User properties could not be set.");
88 return;
89 }
90 if(playorder.equals(CandidateselectorPlayorder.ATRANDOM.toString())) {
91 dj.getCandidateSelector().playRequestsAtRandom();
92 } else if (playorder.equals(CandidateselectorPlayorder.INREQUESTORDER.toString())){
93 dj.getCandidateSelector().playRequestsInOrder();
94 } else {
95 log.error("Invalid setting for setting "+CandidateselectorPlayorder.class.getName()+": "+playorder);
96 }
97 log.info("Applied user properties for user: "+user.getName());
98 }
99
100
101
102
103
104
105
106
107
108 public static void setUserProperty(User user, String propName, String propValue) {
109 Properties userProperties = loadUserProperties(user);
110 userProperties.setProperty(propName, propValue);
111 saveUserProperties(user,userProperties);
112 }
113
114
115
116
117
118
119 private static void saveUserProperties(IUser user, Properties userProperties) {
120 OutputStream out = null;
121 try {
122 out = new FileOutputStream(getUserPropertiesFileName(user));
123 userProperties.store(out, null);
124 } catch (IOException e) {
125 log.error("Failed to write property file: "+getUserPropertiesFileName(user));
126 } finally {
127 try {
128 if (out!=null) out.close();
129 } catch (IOException e) {
130 log.error("Failed to close property file");
131 }
132 }
133 }
134
135
136
137
138
139
140
141 private static String getUserPropertiesFileName(IUser user) {
142 return FileUtils.getMyAccountdir()+File.separator+"user_"+user.getLoginname()+".properties";
143 }
144
145 }