1 /*
2  * aTunes
3  * Copyright (C) Alex Aranda, Sylvain Gaudard and contributors
4  *
5  * See http://www.atunes.org/wiki/index.php?title=Contributing for information about contributors
6  *
7  * http://www.atunes.org
8  * http://sourceforge.net/projects/atunes
9  *
10  * This program is free software; you can redistribute it and/or
11  * modify it under the terms of the GNU General Public License
12  * as published by the Free Software Foundation; either version 2
13  * of the License, or (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU General Public License for more details.
19  */
20 
21 package net.sourceforge.atunes.kernel.modules.pattern;
22 
23 import java.util.ArrayList;
24 import java.util.HashMap;
25 import java.util.List;
26 import java.util.Map;
27 import java.util.Map.Entry;
28 
29 import net.sourceforge.atunes.model.ILocalAudioObject;
30 
31 /**
32  * Returns all possible patterns
33  *
34  * @author alex
35  *
36  */
37 public final class Patterns {
38 
39 	/**
40 	 * All available patterns
41 	 */
42 	private List<AbstractPattern> patternsList;
43 
44 	/**
45 	 * DUMMY PATTERN, USED TO MATCH ANYTHING
46 	 */
47 	private AbstractPattern anyPattern;
48 
49 	/**
50 	 * @param anyPattern
51 	 */
setAnyPattern(final AbstractPattern anyPattern)52 	public void setAnyPattern(final AbstractPattern anyPattern) {
53 		this.anyPattern = anyPattern;
54 	}
55 
56 	/**
57 	 * @param patternsList
58 	 */
setPatternsList(final List<AbstractPattern> patternsList)59 	public void setPatternsList(final List<AbstractPattern> patternsList) {
60 		this.patternsList = patternsList;
61 	}
62 
63 	/**
64 	 * Returns "any" pattern
65 	 *
66 	 * @return
67 	 */
getAnyPattern()68 	AbstractPattern getAnyPattern() {
69 		return anyPattern;
70 	}
71 
72 	/**
73 	 * @return
74 	 */
getPatternsList()75 	public List<AbstractPattern> getPatternsList() {
76 		return patternsList;
77 	}
78 
79 	/**
80 	 * Return only patterns used for massive recognition
81 	 *
82 	 * @return
83 	 */
getMassiveRecognitionPatterns()84 	public List<AbstractPattern> getMassiveRecognitionPatterns() {
85 		List<AbstractPattern> result = new ArrayList<AbstractPattern>();
86 		for (AbstractPattern p : patternsList) {
87 			if (p.isMassiveRecognitionPattern()) {
88 				result.add(p);
89 			}
90 		}
91 		return result;
92 	}
93 
94 	/**
95 	 * Return only patterns used for recognition (both massive or not)
96 	 *
97 	 * @return
98 	 */
getRecognitionPatterns()99 	public List<AbstractPattern> getRecognitionPatterns() {
100 		List<AbstractPattern> result = new ArrayList<AbstractPattern>();
101 		for (AbstractPattern p : patternsList) {
102 			if (p.isRecognitionPattern()) {
103 				result.add(p);
104 			}
105 		}
106 		return result;
107 	}
108 
109 	/**
110 	 * Returns a String as result of applying all defined patterns over a
111 	 * pattern string and a AudioFile
112 	 *
113 	 * @param pattern
114 	 * @param song
115 	 * @return
116 	 */
applyPatternTransformations(final String pattern, final ILocalAudioObject song)117 	public String applyPatternTransformations(final String pattern,
118 			final ILocalAudioObject song) {
119 		String result = pattern;
120 		for (AbstractPattern transform : patternsList) {
121 			result = applyPattern(transform, result, song);
122 		}
123 		return result;
124 	}
125 
126 	/**
127 	 * Returns a string, result of apply this pattern to an audio file object
128 	 *
129 	 * @param pattern
130 	 * @param sourceString
131 	 * @param audioFile
132 	 * @return
133 	 */
applyPattern(final AbstractPattern pattern, final String sourceString, final ILocalAudioObject audioFile)134 	private String applyPattern(final AbstractPattern pattern,
135 			final String sourceString, final ILocalAudioObject audioFile) {
136 		if (!pattern.getPattern().equals(getAnyPattern().getPattern())) {
137 			return sourceString.replace(pattern.getPattern(),
138 					pattern.getAudioFileStringValue(audioFile));
139 		}
140 		return sourceString;
141 	}
142 
143 	/**
144 	 * Returns a map object from a map of matches. Every attribute is filled
145 	 * with the matched value if found in map
146 	 *
147 	 * @param matches
148 	 * @return
149 	 */
getEditTagInfoFromMatches( final Map<String, String> matches)150 	public Map<String, Object> getEditTagInfoFromMatches(
151 			final Map<String, String> matches) {
152 		Map<String, Object> tagInfo = new HashMap<String, Object>();
153 		for (Entry<String, String> entry : matches.entrySet()) {
154 			tagInfo.put(entry.getKey(), entry.getValue());
155 		}
156 		return tagInfo;
157 	}
158 }
159