1 package org.musicontroller.core;
2
3 import java.util.Date;
4
5 import org.musicontroller.model.Linkable;
6
7 /**
8 * Basic functionality for the Linkable objects. In addition to the Linkable
9 * interface, the LinkableAbs has a changed and an inserted-property.
10 * @author Varienaja
11 */
12 public abstract class LinkableAbs implements Linkable {
13 private long _id;
14 private String _name;
15 private Date _changed;
16 private Date _inserted;
17
18 /**
19 * Constructs a LinkableAbs, with empty Name (zero length, but not null), an
20 * Id of -1, Changed to null and Inserted to the current timestamp.
21 */
22 public LinkableAbs() {
23 _changed = null;
24 _inserted=new Date();
25 _id = -1;
26 _name = "";
27 }
28
29 /*
30 * (non-Javadoc)
31 * @see org.musicontroller.model.Linkable#getId()
32 */
33 public long getId() {
34 return _id;
35 }
36
37 public void setId(long id) {
38 _id = id;
39 }
40
41 /*
42 * (non-Javadoc)
43 * @see org.musicontroller.model.Linkable#getName()
44 */
45 public String getName() {
46 return _name;
47 }
48
49 /**
50 * Takes a Name (an ordinary String), and returns the normalized version.
51 * The normalized version contains a maximum of 150 characters, and has all
52 * leading and trailing whitespace removed.
53 * @param name The Name.
54 * @return The normalized Name.
55 */
56 public static String normalizeName(String name) {
57 if (name==null) {
58 return "";
59 } else {
60 name = name.trim(); //Throw useless characters overboard
61 if (name.length()<=150) {
62 return name;
63 } else {
64 return name.substring(0,150);
65 }
66 }
67 }
68
69 /**
70 * Setter for the name. Null values will be understood as empty strings. All
71 * input will be trimmed (trailing and leading whitespace will be removed),
72 * when the resulting string is longer than 150 characters, it will be
73 * cut-off.
74 * @param name The name to set.
75 */
76 public void setName(String name) {
77 _name = normalizeName(name);
78 }
79
80 /**
81 * Returns the date when this object was last-changed. The changed-property
82 * is intended to be used by Hibernate for providing optimistic locking.
83 * @return The timestamp of the last change.
84 */
85 public Date getChanged() {
86 return _changed;
87 }
88
89 /**
90 * Sets the date where this object was last-changed. The changed-property
91 * is intended to be used by Hibernate for providing optimistic locking.
92 * @param changed The timestamp of the last change.
93 */
94 public void setChanged(Date changed) {
95 _changed = changed;
96 }
97
98 /**
99 * Returns the date when this object was inserted (created).
100 * @return The creation timestamp.
101 */
102 public Date getInserted() {
103 return _inserted;
104 }
105
106 /**
107 * Sets the date when this object was inserted (created). The
108 * inserted-property is set automatically in the constructor. There is
109 * normally no use for setting this property.
110 * @param inserted The creation timestamp.
111 */
112 public void setInserted(Date inserted) {
113 _inserted = inserted;
114 }
115
116 }