View Javadoc

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   * Implements loading, setting and saving user properties.
19   * @author deksels
20   * @version $Id: UserProperties.java,v 1.1 2010/03/16 18:55:42 varienaja Exp $
21   */
22  public class UserProperties {
23  	private static final Logger log = Logger.getLogger(UserProperties.class);
24  
25  	/**
26  	 * Specifies the possible strategies of the CandidateSelector
27  	 * to play requested songs.
28  	 */
29  	public static enum CandidateselectorPlayorder {
30  		ATRANDOM,INREQUESTORDER
31  	}
32  	
33  	/**
34  	 * Loads the user properties from disk and returns them.
35  	 * @param user Indicates the user whose properties should be loaded.
36  	 * @return The user properties.
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  	 * Load the user properties and apply them to the MusiController.
58  	 * @param user Specifies the user to apply the properties to.
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 	 * Loads the users' properties file, sets the property specified
102 	 * in the propName parameter to the value specified in the propValue
103 	 * parameter and saves the properties file.
104 	 * @param user The user.
105 	 * @param propName The key of the property to set.
106 	 * @param propValue The value of the property.
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 	 * Writes the user properties to disk.
116 	 * @param user The user.
117 	 * @param userProperties The user properties.
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 	 * Returns the full path name of the User properties file
137 	 * of the user logged in.
138 	 * @param user The user.
139 	 * @return Full path name of the users' properties file.
140 	 */
141 	private static String getUserPropertiesFileName(IUser user) {
142 		return FileUtils.getMyAccountdir()+File.separator+"user_"+user.getLoginname()+".properties";		
143 	}
144 
145 }