Author: tchemit Date: 2009-09-08 00:57:18 +0200 (Tue, 08 Sep 2009) New Revision: 22 Added: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/Attachment.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/AttachmentXpp3Reader.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/IssueXpp3Reader.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/RedmineAbstractXpp3Reader.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/TrackerXpp3Reader.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/UserXpp3Reader.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/VersionXpp3Reader.java maven-redmine-plugin/trunk/src/main/resources/META-INF/ maven-redmine-plugin/trunk/src/main/resources/META-INF/services/ maven-redmine-plugin/trunk/src/main/resources/META-INF/services/org.nuiton.io.xpp3.Xpp3Reader maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/model/ModelBuilderTest.java maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-attachment.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-attachments.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-issue.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-issues.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-project.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-projects.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-tracker.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-trackers.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-user.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-users.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-version.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-versions.xml Removed: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/AbstractXpp3Reader.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/VersionsXpp3Reader.java Modified: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/Issue.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/ModelBuilder.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/Project.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/Tracker.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/User.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/Version.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/ProjectXpp3Reader.java Log: use xpp3 parser from maven-helper-plugin Added: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/Attachment.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/Attachment.java (rev 0) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/Attachment.java 2009-09-07 22:57:18 UTC (rev 22) @@ -0,0 +1,120 @@ +package org.nuiton.redmine.model; + +import java.util.Date; + +/** + * + * @author chemit + * @since 1.0.0 + */ +public class Attachment { + + protected int id; + protected int authorId; + protected int containerId; + protected int filesize; + protected int downloads; + protected Date createdOn; + protected String containerType; + protected String contentType; + protected String description; + protected String digest; + protected String diskFilename; + protected String filename; + + public int getAuthorId() { + return authorId; + } + + public int getContainerId() { + return containerId; + } + + public String getContainerType() { + return containerType; + } + + public String getContentType() { + return contentType; + } + + public Date getCreatedOn() { + return createdOn; + } + + public String getDescription() { + return description; + } + + public String getDigest() { + return digest; + } + + public String getDiskFilename() { + return diskFilename; + } + + public int getDownloads() { + return downloads; + } + + public String getFilename() { + return filename; + } + + public int getFilesize() { + return filesize; + } + + public int getId() { + return id; + } + + public void setAuthorId(int authorId) { + this.authorId = authorId; + } + + public void setContainerId(int containerId) { + this.containerId = containerId; + } + + public void setContainerType(String containerType) { + this.containerType = containerType; + } + + public void setContentType(String contentType) { + this.contentType = contentType; + } + + public void setCreatedOn(Date createdOn) { + this.createdOn = createdOn; + } + + public void setDescription(String description) { + this.description = description; + } + + public void setDigest(String digest) { + this.digest = digest; + } + + public void setDiskFilename(String diskFilename) { + this.diskFilename = diskFilename; + } + + public void setDownloads(int downloads) { + this.downloads = downloads; + } + + public void setFilename(String filename) { + this.filename = filename; + } + + public void setFilesize(int filesize) { + this.filesize = filesize; + } + + public void setId(int id) { + this.id = id; + } +} Property changes on: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/Attachment.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Modified: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/Issue.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/Issue.java 2009-09-07 22:56:48 UTC (rev 21) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/Issue.java 2009-09-07 22:57:18 UTC (rev 22) @@ -1,5 +1,7 @@ package org.nuiton.redmine.model; +import java.util.Date; + /** * * @author chemit @@ -7,7 +9,166 @@ */ public class Issue { - protected String id; + protected int assignedToId; + protected int authorId; + protected int categoryId; + protected int doneRatio; + protected int lockVersion; + protected int priorityId; + protected int projectId; + protected int statusId; + protected int trackerId; + protected int fixedVersionId; + protected int id; + protected float estimatedHours; + protected Date createdOn; + protected Date updatedOn; + protected Date dueDate; + protected Date startDate; protected String description; - protected String status; + protected String subject; + + public int getAssignedToId() { + return assignedToId; + } + + public int getAuthorId() { + return authorId; + } + + public int getCategoryId() { + return categoryId; + } + + public Date getCreatedOn() { + return createdOn; + } + + public String getDescription() { + return description; + } + + public int getDoneRatio() { + return doneRatio; + } + + public Date getDueDate() { + return dueDate; + } + + public float getEstimatedHours() { + return estimatedHours; + } + + public int getFixedVersionId() { + return fixedVersionId; + } + + public int getId() { + return id; + } + + public int getLockVersion() { + return lockVersion; + } + + public int getPriorityId() { + return priorityId; + } + + public int getProjectId() { + return projectId; + } + + public Date getStartDate() { + return startDate; + } + + public int getStatusId() { + return statusId; + } + + public String getSubject() { + return subject; + } + + public int getTrackerId() { + return trackerId; + } + + public Date getUpdatedOn() { + return updatedOn; + } + + public void setAssignedToId(int assignedToId) { + this.assignedToId = assignedToId; + } + + public void setAuthorId(int authorId) { + this.authorId = authorId; + } + + public void setCategoryId(int categoryId) { + this.categoryId = categoryId; + } + + public void setCreatedOn(Date createdOn) { + this.createdOn = createdOn; + } + + public void setDescription(String description) { + this.description = description; + } + + public void setDoneRatio(int doneRatio) { + this.doneRatio = doneRatio; + } + + public void setDueDate(Date dueDate) { + this.dueDate = dueDate; + } + + public void setEstimatedHours(float estimatedHours) { + this.estimatedHours = estimatedHours; + } + + public void setFixedVersionId(int fixedVersionId) { + this.fixedVersionId = fixedVersionId; + } + + public void setId(int id) { + this.id = id; + } + + public void setLockVersion(int lockVersion) { + this.lockVersion = lockVersion; + } + + public void setPriorityId(int priorityId) { + this.priorityId = priorityId; + } + + public void setProjectId(int projectId) { + this.projectId = projectId; + } + + public void setStartDate(Date startDate) { + this.startDate = startDate; + } + + public void setStatusId(int statusId) { + this.statusId = statusId; + } + + public void setSubject(String subject) { + this.subject = subject; + } + + public void setTrackerId(int trackerId) { + this.trackerId = trackerId; + } + + public void setUpdatedOn(Date updatedOn) { + this.updatedOn = updatedOn; + } } Modified: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/ModelBuilder.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/ModelBuilder.java 2009-09-07 22:56:48 UTC (rev 21) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/ModelBuilder.java 2009-09-07 22:57:18 UTC (rev 22) @@ -1,25 +1,20 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ package org.nuiton.redmine.model; -import org.codehaus.plexus.util.IOUtil; import org.codehaus.plexus.util.ReaderFactory; import org.codehaus.plexus.util.xml.pull.XmlPullParserException; import java.io.File; import java.io.IOException; import java.io.Reader; -import java.io.StringReader; -import java.io.StringWriter; +import java.lang.reflect.Array; import org.apache.maven.plugin.logging.Log; -import org.nuiton.redmine.model.io.xpp3.ProjectXpp3Reader; -import org.nuiton.redmine.model.io.xpp3.VersionsXpp3Reader; +import org.nuiton.io.xpp3.Xpp3Helper; /** - * + * Pour construire le modèle à partir de fichiers xml contenant les données. + * * @author chemit + * @since 1.0.0 */ public class ModelBuilder { @@ -29,67 +24,110 @@ this.log = log; } - public Project readProject(File file) - throws IOException, XmlPullParserException { + public Attachment readAttachment(File file) throws IOException, XmlPullParserException { - Project project = null; + Attachment result = readObject(Attachment.class, file); + return result; + } - if (file.exists() && file.isFile()) { - log.info("will parse project from: '" + file.getAbsolutePath() + "'"); - Reader reader = null; - try { - reader = ReaderFactory.newXmlReader(file); - StringWriter sWriter = new StringWriter(); + public Issue readIssue(File file) throws IOException, XmlPullParserException { - IOUtil.copy(reader, sWriter); + Issue result = readObject(Issue.class, file); + return result; + } - String rawInput = sWriter.toString(); + public Project readProject(File file) throws IOException, XmlPullParserException { - StringReader sReader = new StringReader(rawInput); + Project result = readObject(Project.class, file); + return result; + } - ProjectXpp3Reader modelReader = new ProjectXpp3Reader(); + public Tracker readTracker(File file) throws IOException, XmlPullParserException { - project = modelReader.read(sReader); + Tracker result = readObject(Tracker.class, file); + return result; + } - } finally { - IOUtil.close(reader); - } - } else { - log.warn("the file was not find or is a not a file: '" + file.getAbsolutePath() + "'"); - } + public User readUser(File file) throws IOException, XmlPullParserException { - return project; + User result = readObject(User.class, file); + return result; } - public Version readVersion(File file) - throws IOException, XmlPullParserException { + public Version readVersion(File file) throws IOException, XmlPullParserException { - Version version = null; + Version result = readObject(Version.class, file); + return result; + } + public Attachment[] readAttachments(File file) throws IOException, XmlPullParserException { + + Attachment[] result = readObjects(Attachment.class, file); + + return result; + } + + public Issue[] readIssues(File file) throws IOException, XmlPullParserException { + + Issue[] result = readObjects(Issue.class, file); + return result; + } + + public Project[] readProjects(File file) throws IOException, XmlPullParserException { + + Project[] result = readObjects(Project.class, file); + return result; + } + + public Tracker[] readTrackers(File file) throws IOException, XmlPullParserException { + + Tracker[] result = readObjects(Tracker.class, file); + return result; + } + + public User[] readUsers(File file) throws IOException, XmlPullParserException { + + User[] result = readObjects(User.class, file); + return result; + } + + public Version[] readVersions(File file) throws IOException, XmlPullParserException { + + Version[] result = readObjects(Version.class, file); + return result; + } + + protected <O> O readObject(Class<O> klass, File file) throws IOException, XmlPullParserException { + + O result = null; + if (file.exists() && file.isFile()) { log.info("will parse project from: '" + file.getAbsolutePath() + "'"); - Reader reader = null; - try { - reader = ReaderFactory.newXmlReader(file); - StringWriter sWriter = new StringWriter(); + Reader reader = ReaderFactory.newXmlReader(file); + result = (O) Xpp3Helper.readObject(klass, reader); - IOUtil.copy(reader, sWriter); + } else { + log.warn("the file was not found or is a not a file: '" + file.getAbsolutePath() + "'"); + } - String rawInput = sWriter.toString(); + return result; + } - StringReader sReader = new StringReader(rawInput); + protected <O> O[] readObjects(Class<O> klass, File file) throws IOException, XmlPullParserException { - VersionsXpp3Reader modelReader = new VersionsXpp3Reader(); + Object[] objects = null; - version = modelReader.read(sReader); + if (file.exists() && file.isFile()) { + log.info("will parse project from: '" + file.getAbsolutePath() + "'"); + Reader reader = ReaderFactory.newXmlReader(file); + objects = Xpp3Helper.readObjects(klass, reader); - } finally { - IOUtil.close(reader); - } } else { - log.warn("the file was not find or is a not a file: '" + file.getAbsolutePath() + "'"); + log.warn("the file was not found or is a not a file: '" + file.getAbsolutePath() + "'"); } - return version; + O[] result = (O[]) Array.newInstance(klass, objects.length); + System.arraycopy(objects, 0, result, 0, result.length); + return result; } } Modified: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/Project.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/Project.java 2009-09-07 22:56:48 UTC (rev 21) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/Project.java 2009-09-07 22:57:18 UTC (rev 22) @@ -20,7 +20,7 @@ protected int parentId; protected int projectsCount; protected int status; - protected boolean ispublic; + protected boolean isPublic; public Date getCreatedOn() { return createdOn; @@ -42,8 +42,8 @@ return identifier; } - public boolean isIspublic() { - return ispublic; + public boolean isIsPublic() { + return isPublic; } public String getName() { @@ -86,8 +86,8 @@ this.identifier = identifier; } - public void setIspublic(boolean ispublic) { - this.ispublic = ispublic; + public void setIsPublic(boolean ispublic) { + this.isPublic = ispublic; } public void setName(String name) { Modified: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/Tracker.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/Tracker.java 2009-09-07 22:56:48 UTC (rev 21) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/Tracker.java 2009-09-07 22:57:18 UTC (rev 22) @@ -7,5 +7,67 @@ */ public class Tracker { - protected String type; + protected int id; + protected int projectId; + protected int trackerId; + protected int position; + protected boolean isInChlog; + protected boolean isInRoadmap; + protected String name; + + public int getId() { + return id; + } + + public boolean isIsInChlog() { + return isInChlog; + } + + public boolean isIsInRoadmap() { + return isInRoadmap; + } + + public String getName() { + return name; + } + + public int getPosition() { + return position; + } + + public int getProjectId() { + return projectId; + } + + public int getTrackerId() { + return trackerId; + } + + public void setId(int id) { + this.id = id; + } + + public void setIsInChlog(boolean isInChlog) { + this.isInChlog = isInChlog; + } + + public void setIsInRoadmap(boolean isInRoadmap) { + this.isInRoadmap = isInRoadmap; + } + + public void setName(String name) { + this.name = name; + } + + public void setPosition(int position) { + this.position = position; + } + + public void setProjectId(int projectId) { + this.projectId = projectId; + } + + public void setTrackerId(int trackerId) { + this.trackerId = trackerId; + } } Modified: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/User.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/User.java 2009-09-07 22:56:48 UTC (rev 21) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/User.java 2009-09-07 22:57:18 UTC (rev 22) @@ -1,5 +1,7 @@ package org.nuiton.redmine.model; +import java.util.Date; + /** * * @author chemit @@ -8,6 +10,148 @@ */ public class User { - protected String id; - protected String email; + protected boolean admin; + protected boolean mailNotification; + protected int id; + protected int authSourceId; + protected int memberId; + protected int roleId; + protected int status; + protected Date createdOn; + protected Date updatedOn; + protected Date lastLoginOn; + protected String firstname; + protected String lastname; + protected String login; + protected String language; + protected String mail; + protected String hashedPassword; + + public boolean isAdmin() { + return admin; + } + + public int getAuthSourceId() { + return authSourceId; + } + + public Date getCreatedOn() { + return createdOn; + } + + public String getMail() { + return mail; + } + + public String getFirstname() { + return firstname; + } + + public String getHashedPassword() { + return hashedPassword; + } + + public int getId() { + return id; + } + + public String getLanguage() { + return language; + } + + public Date getLastLoginOn() { + return lastLoginOn; + } + + public String getLastname() { + return lastname; + } + + public String getLogin() { + return login; + } + + public boolean isMailNotification() { + return mailNotification; + } + + public int getMemberId() { + return memberId; + } + + public int getRoleId() { + return roleId; + } + + public int getStatus() { + return status; + } + + public Date getUpdatedOn() { + return updatedOn; + } + + public void setAdmin(boolean admin) { + this.admin = admin; + } + + public void setAuthSourceId(int authSourceId) { + this.authSourceId = authSourceId; + } + + public void setCreatedOn(Date createdOn) { + this.createdOn = createdOn; + } + + public void setMail(String email) { + this.mail = email; + } + + public void setFirstname(String firstname) { + this.firstname = firstname; + } + + public void setHashedPassword(String hashedPassword) { + this.hashedPassword = hashedPassword; + } + + public void setId(int id) { + this.id = id; + } + + public void setLanguage(String language) { + this.language = language; + } + + public void setLastLoginOn(Date lastLoginOn) { + this.lastLoginOn = lastLoginOn; + } + + public void setLastname(String lastname) { + this.lastname = lastname; + } + + public void setLogin(String login) { + this.login = login; + } + + public void setMailNotification(boolean mailNotification) { + this.mailNotification = mailNotification; + } + + public void setMemberId(int memberId) { + this.memberId = memberId; + } + + public void setRoleId(int roleId) { + this.roleId = roleId; + } + + public void setStatus(int status) { + this.status = status; + } + + public void setUpdatedOn(Date updatedOn) { + this.updatedOn = updatedOn; + } } Modified: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/Version.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/Version.java 2009-09-07 22:56:48 UTC (rev 21) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/Version.java 2009-09-07 22:57:18 UTC (rev 22) @@ -14,7 +14,7 @@ protected Date effectiveDate; protected String name; protected String description; - protected String wikiPagetitle; + protected String wikiPageTitle; protected int id; protected int projectId; @@ -46,8 +46,8 @@ return updatedOn; } - public String getWikiPagetitle() { - return wikiPagetitle; + public String getWikiPageTitle() { + return wikiPageTitle; } public void setCreatedOn(Date createdOn) { @@ -78,7 +78,7 @@ this.updatedOn = updatedOn; } - public void setWikiPagetitle(String wikiPagetitle) { - this.wikiPagetitle = wikiPagetitle; + public void setWikiPageTitle(String wikiPagetitle) { + this.wikiPageTitle = wikiPagetitle; } } Deleted: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/AbstractXpp3Reader.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/AbstractXpp3Reader.java 2009-09-07 22:56:48 UTC (rev 21) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/AbstractXpp3Reader.java 2009-09-07 22:57:18 UTC (rev 22) @@ -1,649 +0,0 @@ -package org.nuiton.redmine.model.io.xpp3; - -import java.io.IOException; -import java.io.Reader; -import java.text.DateFormat; -import java.util.Locale; -import org.codehaus.plexus.util.ReaderFactory; -import org.codehaus.plexus.util.xml.pull.MXParser; -import org.codehaus.plexus.util.xml.pull.XmlPullParser; -import org.codehaus.plexus.util.xml.pull.XmlPullParserException; - -/** - * - * @param <M> le type du model a generer - * - * @author chemit - * @since 1.0.0 - */ -public abstract class AbstractXpp3Reader<M> { - - /** - * Read a parser, generate the model and return it. - * - * @param parser the parser - * @param strict flag to force strict evaluation - * @return the created model - * @throws IOException if pb while reading - * @throws XmlPullParserException if pb while parsing xml - */ - protected abstract M doParse(XmlPullParser parser, boolean strict) throws IOException, XmlPullParserException; - /** - * If set the parser will be loaded with all single characters - * from the XHTML specification. - * The entities used: - * <ul> - * <li>http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent</li> - * <li>http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent</li> - * <li>http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent</li> - * </ul> - */ - private boolean addDefaultEntities = true; - - //-----------/ - //- Methods -/ - //-----------/ - /** - * Returns the state of the "add default entities" flag. - * - * @return boolean - */ - public boolean getAddDefaultEntities() { - return addDefaultEntities; - } //-- boolean getAddDefaultEntities() - - /** - * Method getBooleanValue. - * - * @param s - * @param parser - * @param attribute - * @throws XmlPullParserException - * @return boolean - */ - public boolean getBooleanValue(String s, String attribute, XmlPullParser parser) - throws XmlPullParserException { - return getBooleanValue(s, attribute, parser, null); - } //-- boolean getBooleanValue( String, String, XmlPullParser ) - - /** - * Method getBooleanValue. - * - * @param s - * @param defaultValue - * @param parser - * @param attribute - * @throws XmlPullParserException - * @return boolean - */ - public boolean getBooleanValue(String s, String attribute, XmlPullParser parser, String defaultValue) - throws XmlPullParserException { - if (s != null && s.length() != 0) { - return Boolean.valueOf(s).booleanValue(); - } - if (defaultValue != null) { - return Boolean.valueOf(defaultValue).booleanValue(); - } - return false; - } //-- boolean getBooleanValue( String, String, XmlPullParser, String ) - - /** - * Method getByteValue. - * - * @param s - * @param strict - * @param parser - * @param attribute - * @throws XmlPullParserException - * @return byte - */ - public byte getByteValue(String s, String attribute, XmlPullParser parser, boolean strict) - throws XmlPullParserException { - if (s != null) { - try { - return Byte.valueOf(s).byteValue(); - } catch (NumberFormatException e) { - if (strict) { - throw new XmlPullParserException("Unable to parse element '" + attribute + "', must be a byte", parser, null); - } - } - } - return 0; - } //-- byte getByteValue( String, String, XmlPullParser, boolean ) - - /** - * Method getCharacterValue. - * - * @param s - * @param parser - * @param attribute - * @throws XmlPullParserException - * @return char - */ - public char getCharacterValue(String s, String attribute, XmlPullParser parser) - throws XmlPullParserException { - if (s != null) { - return s.charAt(0); - } - return 0; - } //-- char getCharacterValue( String, String, XmlPullParser ) - - /** - * Method getDateValue. - * - * @param s - * @param parser - * @throws XmlPullParserException - * @return java.util.Date - */ - public java.util.Date getDateValue(String s, XmlPullParser parser) - throws XmlPullParserException { - return getDateValue(s, null, parser); - } //-- java.util.Date getDateValue( String, String, XmlPullParser ) - - /** - * Method getDateValue. - * - * @param s - * @param parser - * @param dateFormat - * @throws XmlPullParserException - * @return java.util.Date - */ - public java.util.Date getDateValue(String s, String dateFormat, XmlPullParser parser) - throws XmlPullParserException { - if (s != null) { - DateFormat dateParser; - - if (dateFormat == null) { - dateParser = DateFormat.getDateInstance(); - } else { - dateParser = new java.text.SimpleDateFormat(dateFormat, Locale.US); - } - try { - return dateParser.parse(s); - } catch (java.text.ParseException e) { - throw new XmlPullParserException(e.getMessage()); - } - } - return null; - } //-- java.util.Date getDateValue( String, String, String, XmlPullParser ) - - /** - * Method getDoubleValue. - * - * @param s - * @param strict - * @param parser - * @param attribute - * @throws XmlPullParserException - * @return double - */ - public double getDoubleValue(String s, String attribute, XmlPullParser parser, boolean strict) - throws XmlPullParserException { - if (s != null) { - try { - return Double.valueOf(s).doubleValue(); - } catch (NumberFormatException e) { - if (strict) { - throw new XmlPullParserException("Unable to parse element '" + attribute + "', must be a floating point number", parser, null); - } - } - } - return 0; - } //-- double getDoubleValue( String, String, XmlPullParser, boolean ) - - /** - * Method getFloatValue. - * - * @param s - * @param strict - * @param parser - * @param attribute - * @throws XmlPullParserException - * @return float - */ - public float getFloatValue(String s, String attribute, XmlPullParser parser, boolean strict) - throws XmlPullParserException { - if (s != null) { - try { - return Float.valueOf(s).floatValue(); - } catch (NumberFormatException e) { - if (strict) { - throw new XmlPullParserException("Unable to parse element '" + attribute + "', must be a floating point number", parser, null); - } - } - } - return 0; - } //-- float getFloatValue( String, String, XmlPullParser, boolean ) - - /** - * Method getIntegerValue. - * - * @param s - * @param strict - * @param parser - * @param attribute - * @throws XmlPullParserException - * @return int - */ - public int getIntegerValue(String s, String attribute, XmlPullParser parser, boolean strict) - throws XmlPullParserException { - if (s != null) { - try { - return Integer.valueOf(s).intValue(); - } catch (NumberFormatException e) { - if (strict) { - throw new XmlPullParserException("Unable to parse element '" + attribute + "', must be an integer", parser, null); - } - } - } - return 0; - } //-- int getIntegerValue( String, String, XmlPullParser, boolean ) - - /** - * Method getLongValue. - * - * @param s - * @param strict - * @param parser - * @param attribute - * @throws XmlPullParserException - * @return long - */ - public long getLongValue(String s, String attribute, XmlPullParser parser, boolean strict) - throws XmlPullParserException { - if (s != null) { - try { - return Long.valueOf(s).longValue(); - } catch (NumberFormatException e) { - if (strict) { - throw new XmlPullParserException("Unable to parse element '" + attribute + "', must be a long integer", parser, null); - } - } - } - return 0; - } //-- long getLongValue( String, String, XmlPullParser, boolean ) - - /** - * Method getRequiredAttributeValue. - * - * @param s - * @param strict - * @param parser - * @param attribute - * @throws XmlPullParserException - * @return String - */ - public String getRequiredAttributeValue(String s, String attribute, XmlPullParser parser, boolean strict) - throws XmlPullParserException { - if (s == null) { - if (strict) { - throw new XmlPullParserException("Missing required value for attribute '" + attribute + "'", parser, null); - } - } - return s; - } //-- String getRequiredAttributeValue( String, String, XmlPullParser, boolean ) - - /** - * Method getShortValue. - * - * @param s - * @param strict - * @param parser - * @param attribute - * @throws XmlPullParserException - * @return short - */ - public short getShortValue(String s, String attribute, XmlPullParser parser, boolean strict) - throws XmlPullParserException { - if (s != null) { - try { - return Short.valueOf(s).shortValue(); - } catch (NumberFormatException e) { - if (strict) { - throw new XmlPullParserException("Unable to parse element '" + attribute + "', must be a short integer", parser, null); - } - } - } - return 0; - } //-- short getShortValue( String, String, XmlPullParser, boolean ) - - /** - * Method getTrimmedValue. - * - * @param s - * @return String - */ - public String getTrimmedValue(String s) { - if (s != null) { - s = s.trim(); - } - return s; - } //-- String getTrimmedValue( String ) - - /** - * - * @param type - * @param parser - * @param parsed - * @return the text of the node - * @throws XmlPullParserException - * @throws IOException - */ - protected String getText(String type, XmlPullParser parser, java.util.Set<String> parsed) throws XmlPullParserException, IOException { - if (parsed.contains(type)) { - throw new XmlPullParserException("Duplicated tag: '" + parser.getName() + "'", parser, null); - } - parsed.add(type); - return getTrimmedValue(parser.nextText()); - } //-- String getText( String, XmlPullParser , java.util.Set ) - - /** - * @see ReaderFactory#newXmlReader - * - * @param reader - * @throws IOException - * @throws XmlPullParserException - * @return Settings - */ - public M read( Reader reader ) - throws IOException, XmlPullParserException - { - return read( reader, true ); - } //-- Settings read( Reader ) - - /** - * @see ReaderFactory#newXmlReader - * - * @param reader - * @param strict - * @throws IOException - * @throws XmlPullParserException - * @return Settings - */ - public M read(Reader reader, boolean strict) - throws IOException, XmlPullParserException { - XmlPullParser parser = new MXParser(); - - parser.setInput(reader); - - if (addDefaultEntities) { - // ---------------------------------------------------------------------- - // Latin 1 entities - // ---------------------------------------------------------------------- - - parser.defineEntityReplacementText("nbsp", "\u00a0"); - parser.defineEntityReplacementText("iexcl", "\u00a1"); - parser.defineEntityReplacementText("cent", "\u00a2"); - parser.defineEntityReplacementText("pound", "\u00a3"); - parser.defineEntityReplacementText("curren", "\u00a4"); - parser.defineEntityReplacementText("yen", "\u00a5"); - parser.defineEntityReplacementText("brvbar", "\u00a6"); - parser.defineEntityReplacementText("sect", "\u00a7"); - parser.defineEntityReplacementText("uml", "\u00a8"); - parser.defineEntityReplacementText("copy", "\u00a9"); - parser.defineEntityReplacementText("ordf", "\u00aa"); - parser.defineEntityReplacementText("laquo", "\u00ab"); - parser.defineEntityReplacementText("not", "\u00ac"); - parser.defineEntityReplacementText("shy", "\u00ad"); - parser.defineEntityReplacementText("reg", "\u00ae"); - parser.defineEntityReplacementText("macr", "\u00af"); - parser.defineEntityReplacementText("deg", "\u00b0"); - parser.defineEntityReplacementText("plusmn", "\u00b1"); - parser.defineEntityReplacementText("sup2", "\u00b2"); - parser.defineEntityReplacementText("sup3", "\u00b3"); - parser.defineEntityReplacementText("acute", "\u00b4"); - parser.defineEntityReplacementText("micro", "\u00b5"); - parser.defineEntityReplacementText("para", "\u00b6"); - parser.defineEntityReplacementText("middot", "\u00b7"); - parser.defineEntityReplacementText("cedil", "\u00b8"); - parser.defineEntityReplacementText("sup1", "\u00b9"); - parser.defineEntityReplacementText("ordm", "\u00ba"); - parser.defineEntityReplacementText("raquo", "\u00bb"); - parser.defineEntityReplacementText("frac14", "\u00bc"); - parser.defineEntityReplacementText("frac12", "\u00bd"); - parser.defineEntityReplacementText("frac34", "\u00be"); - parser.defineEntityReplacementText("iquest", "\u00bf"); - parser.defineEntityReplacementText("Agrave", "\u00c0"); - parser.defineEntityReplacementText("Aacute", "\u00c1"); - parser.defineEntityReplacementText("Acirc", "\u00c2"); - parser.defineEntityReplacementText("Atilde", "\u00c3"); - parser.defineEntityReplacementText("Auml", "\u00c4"); - parser.defineEntityReplacementText("Aring", "\u00c5"); - parser.defineEntityReplacementText("AElig", "\u00c6"); - parser.defineEntityReplacementText("Ccedil", "\u00c7"); - parser.defineEntityReplacementText("Egrave", "\u00c8"); - parser.defineEntityReplacementText("Eacute", "\u00c9"); - parser.defineEntityReplacementText("Ecirc", "\u00ca"); - parser.defineEntityReplacementText("Euml", "\u00cb"); - parser.defineEntityReplacementText("Igrave", "\u00cc"); - parser.defineEntityReplacementText("Iacute", "\u00cd"); - parser.defineEntityReplacementText("Icirc", "\u00ce"); - parser.defineEntityReplacementText("Iuml", "\u00cf"); - parser.defineEntityReplacementText("ETH", "\u00d0"); - parser.defineEntityReplacementText("Ntilde", "\u00d1"); - parser.defineEntityReplacementText("Ograve", "\u00d2"); - parser.defineEntityReplacementText("Oacute", "\u00d3"); - parser.defineEntityReplacementText("Ocirc", "\u00d4"); - parser.defineEntityReplacementText("Otilde", "\u00d5"); - parser.defineEntityReplacementText("Ouml", "\u00d6"); - parser.defineEntityReplacementText("times", "\u00d7"); - parser.defineEntityReplacementText("Oslash", "\u00d8"); - parser.defineEntityReplacementText("Ugrave", "\u00d9"); - parser.defineEntityReplacementText("Uacute", "\u00da"); - parser.defineEntityReplacementText("Ucirc", "\u00db"); - parser.defineEntityReplacementText("Uuml", "\u00dc"); - parser.defineEntityReplacementText("Yacute", "\u00dd"); - parser.defineEntityReplacementText("THORN", "\u00de"); - parser.defineEntityReplacementText("szlig", "\u00df"); - parser.defineEntityReplacementText("agrave", "\u00e0"); - parser.defineEntityReplacementText("aacute", "\u00e1"); - parser.defineEntityReplacementText("acirc", "\u00e2"); - parser.defineEntityReplacementText("atilde", "\u00e3"); - parser.defineEntityReplacementText("auml", "\u00e4"); - parser.defineEntityReplacementText("aring", "\u00e5"); - parser.defineEntityReplacementText("aelig", "\u00e6"); - parser.defineEntityReplacementText("ccedil", "\u00e7"); - parser.defineEntityReplacementText("egrave", "\u00e8"); - parser.defineEntityReplacementText("eacute", "\u00e9"); - parser.defineEntityReplacementText("ecirc", "\u00ea"); - parser.defineEntityReplacementText("euml", "\u00eb"); - parser.defineEntityReplacementText("igrave", "\u00ec"); - parser.defineEntityReplacementText("iacute", "\u00ed"); - parser.defineEntityReplacementText("icirc", "\u00ee"); - parser.defineEntityReplacementText("iuml", "\u00ef"); - parser.defineEntityReplacementText("eth", "\u00f0"); - parser.defineEntityReplacementText("ntilde", "\u00f1"); - parser.defineEntityReplacementText("ograve", "\u00f2"); - parser.defineEntityReplacementText("oacute", "\u00f3"); - parser.defineEntityReplacementText("ocirc", "\u00f4"); - parser.defineEntityReplacementText("otilde", "\u00f5"); - parser.defineEntityReplacementText("ouml", "\u00f6"); - parser.defineEntityReplacementText("divide", "\u00f7"); - parser.defineEntityReplacementText("oslash", "\u00f8"); - parser.defineEntityReplacementText("ugrave", "\u00f9"); - parser.defineEntityReplacementText("uacute", "\u00fa"); - parser.defineEntityReplacementText("ucirc", "\u00fb"); - parser.defineEntityReplacementText("uuml", "\u00fc"); - parser.defineEntityReplacementText("yacute", "\u00fd"); - parser.defineEntityReplacementText("thorn", "\u00fe"); - parser.defineEntityReplacementText("yuml", "\u00ff"); - - // ---------------------------------------------------------------------- - // Special entities - // ---------------------------------------------------------------------- - - parser.defineEntityReplacementText("OElig", "\u0152"); - parser.defineEntityReplacementText("oelig", "\u0153"); - parser.defineEntityReplacementText("Scaron", "\u0160"); - parser.defineEntityReplacementText("scaron", "\u0161"); - parser.defineEntityReplacementText("Yuml", "\u0178"); - parser.defineEntityReplacementText("circ", "\u02c6"); - parser.defineEntityReplacementText("tilde", "\u02dc"); - parser.defineEntityReplacementText("ensp", "\u2002"); - parser.defineEntityReplacementText("emsp", "\u2003"); - parser.defineEntityReplacementText("thinsp", "\u2009"); - parser.defineEntityReplacementText("zwnj", "\u200c"); - parser.defineEntityReplacementText("zwj", "\u200d"); - parser.defineEntityReplacementText("lrm", "\u200e"); - parser.defineEntityReplacementText("rlm", "\u200f"); - parser.defineEntityReplacementText("ndash", "\u2013"); - parser.defineEntityReplacementText("mdash", "\u2014"); - parser.defineEntityReplacementText("lsquo", "\u2018"); - parser.defineEntityReplacementText("rsquo", "\u2019"); - parser.defineEntityReplacementText("sbquo", "\u201a"); - parser.defineEntityReplacementText("ldquo", "\u201c"); - parser.defineEntityReplacementText("rdquo", "\u201d"); - parser.defineEntityReplacementText("bdquo", "\u201e"); - parser.defineEntityReplacementText("dagger", "\u2020"); - parser.defineEntityReplacementText("Dagger", "\u2021"); - parser.defineEntityReplacementText("permil", "\u2030"); - parser.defineEntityReplacementText("lsaquo", "\u2039"); - parser.defineEntityReplacementText("rsaquo", "\u203a"); - parser.defineEntityReplacementText("euro", "\u20ac"); - - // ---------------------------------------------------------------------- - // Symbol entities - // ---------------------------------------------------------------------- - - parser.defineEntityReplacementText("fnof", "\u0192"); - parser.defineEntityReplacementText("Alpha", "\u0391"); - parser.defineEntityReplacementText("Beta", "\u0392"); - parser.defineEntityReplacementText("Gamma", "\u0393"); - parser.defineEntityReplacementText("Delta", "\u0394"); - parser.defineEntityReplacementText("Epsilon", "\u0395"); - parser.defineEntityReplacementText("Zeta", "\u0396"); - parser.defineEntityReplacementText("Eta", "\u0397"); - parser.defineEntityReplacementText("Theta", "\u0398"); - parser.defineEntityReplacementText("Iota", "\u0399"); - parser.defineEntityReplacementText("Kappa", "\u039a"); - parser.defineEntityReplacementText("Lambda", "\u039b"); - parser.defineEntityReplacementText("Mu", "\u039c"); - parser.defineEntityReplacementText("Nu", "\u039d"); - parser.defineEntityReplacementText("Xi", "\u039e"); - parser.defineEntityReplacementText("Omicron", "\u039f"); - parser.defineEntityReplacementText("Pi", "\u03a0"); - parser.defineEntityReplacementText("Rho", "\u03a1"); - parser.defineEntityReplacementText("Sigma", "\u03a3"); - parser.defineEntityReplacementText("Tau", "\u03a4"); - parser.defineEntityReplacementText("Upsilon", "\u03a5"); - parser.defineEntityReplacementText("Phi", "\u03a6"); - parser.defineEntityReplacementText("Chi", "\u03a7"); - parser.defineEntityReplacementText("Psi", "\u03a8"); - parser.defineEntityReplacementText("Omega", "\u03a9"); - parser.defineEntityReplacementText("alpha", "\u03b1"); - parser.defineEntityReplacementText("beta", "\u03b2"); - parser.defineEntityReplacementText("gamma", "\u03b3"); - parser.defineEntityReplacementText("delta", "\u03b4"); - parser.defineEntityReplacementText("epsilon", "\u03b5"); - parser.defineEntityReplacementText("zeta", "\u03b6"); - parser.defineEntityReplacementText("eta", "\u03b7"); - parser.defineEntityReplacementText("theta", "\u03b8"); - parser.defineEntityReplacementText("iota", "\u03b9"); - parser.defineEntityReplacementText("kappa", "\u03ba"); - parser.defineEntityReplacementText("lambda", "\u03bb"); - parser.defineEntityReplacementText("mu", "\u03bc"); - parser.defineEntityReplacementText("nu", "\u03bd"); - parser.defineEntityReplacementText("xi", "\u03be"); - parser.defineEntityReplacementText("omicron", "\u03bf"); - parser.defineEntityReplacementText("pi", "\u03c0"); - parser.defineEntityReplacementText("rho", "\u03c1"); - parser.defineEntityReplacementText("sigmaf", "\u03c2"); - parser.defineEntityReplacementText("sigma", "\u03c3"); - parser.defineEntityReplacementText("tau", "\u03c4"); - parser.defineEntityReplacementText("upsilon", "\u03c5"); - parser.defineEntityReplacementText("phi", "\u03c6"); - parser.defineEntityReplacementText("chi", "\u03c7"); - parser.defineEntityReplacementText("psi", "\u03c8"); - parser.defineEntityReplacementText("omega", "\u03c9"); - parser.defineEntityReplacementText("thetasym", "\u03d1"); - parser.defineEntityReplacementText("upsih", "\u03d2"); - parser.defineEntityReplacementText("piv", "\u03d6"); - parser.defineEntityReplacementText("bull", "\u2022"); - parser.defineEntityReplacementText("hellip", "\u2026"); - parser.defineEntityReplacementText("prime", "\u2032"); - parser.defineEntityReplacementText("Prime", "\u2033"); - parser.defineEntityReplacementText("oline", "\u203e"); - parser.defineEntityReplacementText("frasl", "\u2044"); - parser.defineEntityReplacementText("weierp", "\u2118"); - parser.defineEntityReplacementText("image", "\u2111"); - parser.defineEntityReplacementText("real", "\u211c"); - parser.defineEntityReplacementText("trade", "\u2122"); - parser.defineEntityReplacementText("alefsym", "\u2135"); - parser.defineEntityReplacementText("larr", "\u2190"); - parser.defineEntityReplacementText("uarr", "\u2191"); - parser.defineEntityReplacementText("rarr", "\u2192"); - parser.defineEntityReplacementText("darr", "\u2193"); - parser.defineEntityReplacementText("harr", "\u2194"); - parser.defineEntityReplacementText("crarr", "\u21b5"); - parser.defineEntityReplacementText("lArr", "\u21d0"); - parser.defineEntityReplacementText("uArr", "\u21d1"); - parser.defineEntityReplacementText("rArr", "\u21d2"); - parser.defineEntityReplacementText("dArr", "\u21d3"); - parser.defineEntityReplacementText("hArr", "\u21d4"); - parser.defineEntityReplacementText("forall", "\u2200"); - parser.defineEntityReplacementText("part", "\u2202"); - parser.defineEntityReplacementText("exist", "\u2203"); - parser.defineEntityReplacementText("empty", "\u2205"); - parser.defineEntityReplacementText("nabla", "\u2207"); - parser.defineEntityReplacementText("isin", "\u2208"); - parser.defineEntityReplacementText("notin", "\u2209"); - parser.defineEntityReplacementText("ni", "\u220b"); - parser.defineEntityReplacementText("prod", "\u220f"); - parser.defineEntityReplacementText("sum", "\u2211"); - parser.defineEntityReplacementText("minus", "\u2212"); - parser.defineEntityReplacementText("lowast", "\u2217"); - parser.defineEntityReplacementText("radic", "\u221a"); - parser.defineEntityReplacementText("prop", "\u221d"); - parser.defineEntityReplacementText("infin", "\u221e"); - parser.defineEntityReplacementText("ang", "\u2220"); - parser.defineEntityReplacementText("and", "\u2227"); - parser.defineEntityReplacementText("or", "\u2228"); - parser.defineEntityReplacementText("cap", "\u2229"); - parser.defineEntityReplacementText("cup", "\u222a"); - parser.defineEntityReplacementText("int", "\u222b"); - parser.defineEntityReplacementText("there4", "\u2234"); - parser.defineEntityReplacementText("sim", "\u223c"); - parser.defineEntityReplacementText("cong", "\u2245"); - parser.defineEntityReplacementText("asymp", "\u2248"); - parser.defineEntityReplacementText("ne", "\u2260"); - parser.defineEntityReplacementText("equiv", "\u2261"); - parser.defineEntityReplacementText("le", "\u2264"); - parser.defineEntityReplacementText("ge", "\u2265"); - parser.defineEntityReplacementText("sub", "\u2282"); - parser.defineEntityReplacementText("sup", "\u2283"); - parser.defineEntityReplacementText("nsub", "\u2284"); - parser.defineEntityReplacementText("sube", "\u2286"); - parser.defineEntityReplacementText("supe", "\u2287"); - parser.defineEntityReplacementText("oplus", "\u2295"); - parser.defineEntityReplacementText("otimes", "\u2297"); - parser.defineEntityReplacementText("perp", "\u22a5"); - parser.defineEntityReplacementText("sdot", "\u22c5"); - parser.defineEntityReplacementText("lceil", "\u2308"); - parser.defineEntityReplacementText("rceil", "\u2309"); - parser.defineEntityReplacementText("lfloor", "\u230a"); - parser.defineEntityReplacementText("rfloor", "\u230b"); - parser.defineEntityReplacementText("lang", "\u2329"); - parser.defineEntityReplacementText("rang", "\u232a"); - parser.defineEntityReplacementText("loz", "\u25ca"); - parser.defineEntityReplacementText("spades", "\u2660"); - parser.defineEntityReplacementText("clubs", "\u2663"); - parser.defineEntityReplacementText("hearts", "\u2665"); - parser.defineEntityReplacementText("diams", "\u2666"); - - } - - parser.next(); - return doParse(parser, strict); - } //-- Settings read( Reader, boolean ) - - /** - * Sets the state of the "add default entities" flag. - * - * @param addDefaultEntities - */ - public void setAddDefaultEntities(boolean addDefaultEntities) { - this.addDefaultEntities = addDefaultEntities; - } //-- void setAddDefaultEntities( boolean ) -} Added: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/AttachmentXpp3Reader.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/AttachmentXpp3Reader.java (rev 0) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/AttachmentXpp3Reader.java 2009-09-07 22:57:18 UTC (rev 22) @@ -0,0 +1,39 @@ +package org.nuiton.redmine.model.io.xpp3; + +import java.beans.IntrospectionException; +import org.nuiton.redmine.model.Attachment; + +/** + * {@link Attachment} reader. + * + * @author chemit + * @since 1.0.0 + */ +public class AttachmentXpp3Reader extends RedmineAbstractXpp3Reader { + + public AttachmentXpp3Reader() { + super(Attachment.class); + } + + @Override + protected void initMappers() throws IntrospectionException { + + addMappers(Attachment.class, RedmineDataConverter.Integer, true, + "author-id", + "container-id", + "filesize", + "downloads", + "id"); + + addMappers(Attachment.class, RedmineDataConverter.Datetime, true, + "created-on"); + + addMappers(Attachment.class, RedmineDataConverter.Text, true, + "container-type", + "content-type", + "description", + "digest", + "disk-filename", + "filename"); + } +} Property changes on: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/AttachmentXpp3Reader.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/IssueXpp3Reader.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/IssueXpp3Reader.java (rev 0) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/IssueXpp3Reader.java 2009-09-07 22:57:18 UTC (rev 22) @@ -0,0 +1,49 @@ +package org.nuiton.redmine.model.io.xpp3; + +import java.beans.IntrospectionException; +import org.nuiton.redmine.model.Issue; + +/** + * {@link Issue} reader. + * + * @author chemit + * @since 1.0.0 + */ +public class IssueXpp3Reader extends RedmineAbstractXpp3Reader { + + public IssueXpp3Reader() { + super(Issue.class); + } + + @Override + protected void initMappers() throws IntrospectionException { + + addMappers(Issue.class, RedmineDataConverter.Integer, true, + "assigned-to-id", + "author-id", + "category-id", + "done-ratio", + "lock-version", + "priority-id", + "project-id", + "status-id", + "tracker-id", + "fixed-version-id", + "id"); + + addMappers(Issue.class, RedmineDataConverter.Float, true, + "estimated-hours"); + + addMappers(Issue.class, RedmineDataConverter.Datetime, true, + "created-on", + "updated-on"); + + addMappers(Issue.class, RedmineDataConverter.Date, true, + "due-date", + "start-date"); + + addMappers(Issue.class, RedmineDataConverter.Text, true, + "description", + "subject"); + } +} Property changes on: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/IssueXpp3Reader.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Modified: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/ProjectXpp3Reader.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/ProjectXpp3Reader.java 2009-09-07 22:56:48 UTC (rev 21) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/ProjectXpp3Reader.java 2009-09-07 22:57:18 UTC (rev 22) @@ -1,94 +1,40 @@ package org.nuiton.redmine.model.io.xpp3; -import java.io.IOException; -import org.codehaus.plexus.util.xml.pull.XmlPullParser; -import org.codehaus.plexus.util.xml.pull.XmlPullParserException; +import java.beans.IntrospectionException; import org.nuiton.redmine.model.Project; /** + * {@link Project} reader. * * @author chemit * @since 1.0.0 */ -public class ProjectXpp3Reader extends AbstractXpp3Reader<Project> { +public class ProjectXpp3Reader extends RedmineAbstractXpp3Reader { + public ProjectXpp3Reader() { + super(Project.class); + } + @Override - protected Project doParse(XmlPullParser parser, boolean strict) throws IOException, XmlPullParserException { + protected void initMappers() throws IntrospectionException { - Project project = new Project(); + addMappers(Project.class, RedmineDataConverter.Integer, true, + "id", + "parent-id", + "projects-count", + "status"); - java.util.Set<String> parsed = new java.util.HashSet<String>(); - int eventType = parser.getEventType(); - boolean foundRoot = false; - while (eventType != XmlPullParser.END_DOCUMENT) { - String txt; - if (eventType == XmlPullParser.START_TAG) { - if (parser.getName().equals("project")) { - foundRoot = true; - } else if (parser.getName().equals("created-on")) { - txt = getText("created-on", parser, parsed); - if (txt != null && !txt.isEmpty()) { - project.setCreatedOn(getDateValue(txt, "yyyy-MM-dd'T'HH:mm:ss'+'SS':'SS", parser)); - } - } else if (parser.getName().equals("updated-on")) { - txt = getText("updated-on", parser, parsed); - if (txt != null && !txt.isEmpty()) { - project.setUpdatedOn(getDateValue(txt, "yyyy-MM-dd'T'HH:mm:ss'+'SS':'SS",parser)); - } - } else if (parser.getName().equals("description")) { - txt = getText("description", parser, parsed); - if (txt != null && !txt.isEmpty()) { - project.setDescription(txt); - } - } else if (parser.getName().equals("homepage")) { - txt = getText("homepage", parser, parsed); - if (txt != null && !txt.isEmpty()) { - project.setHomepage(txt); - } - } else if (parser.getName().equals("name")) { - txt = getText("name", parser, parsed); - if (txt != null && !txt.isEmpty()) { - project.setName(txt); - } - } else if (parser.getName().equals("identifier")) { - txt = getText("identifier", parser, parsed); - if (txt != null && !txt.isEmpty()) { - project.setIdentifier(txt); - } - } else if (parser.getName().equals("id")) { - txt = getText("id", parser, parsed); - if (txt != null && !txt.isEmpty()) { - project.setId(getIntegerValue(txt, null, parser, strict)); - } + addMappers(Project.class, RedmineDataConverter.Boolean, true, + "is-public"); - } else if (parser.getName().equals("parent-id")) { - txt = getText("parent-id", parser, parsed); - if (txt != null && !txt.isEmpty()) { - project.setParentId(getIntegerValue(txt, null, parser, strict)); - } + addMappers(Project.class, RedmineDataConverter.Datetime, true, + "created-on", + "updated-on"); - } else if (parser.getName().equals("projects-count")) { - txt = getText("projects-count", parser, parsed); - if (txt != null && !txt.isEmpty()) { - project.setProjectsCount(getIntegerValue(txt, null, parser, strict)); - } - - } else if (parser.getName().equals("status")) { - txt = getText("status", parser, parsed); - if (txt != null && !txt.isEmpty()) { - project.setStatus(getIntegerValue(txt, null, parser, strict)); - } - } else if (parser.getName().equals("is-public")) { - txt = getText("is-public", parser, parsed); - if (txt != null && !txt.isEmpty()) { - project.setIspublic(getBooleanValue(txt, null, parser)); - } - } else if (strict) { - throw new XmlPullParserException("Unrecognised tag: '" + parser.getName() + "'", parser, null); - } - } - eventType = parser.next(); - } - return project; + addMappers(Project.class, RedmineDataConverter.Text, true, + "description", + "homepage", + "identifier", + "name"); } } Copied: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/RedmineAbstractXpp3Reader.java (from rev 20, maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/AbstractXpp3Reader.java) =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/RedmineAbstractXpp3Reader.java (rev 0) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/RedmineAbstractXpp3Reader.java 2009-09-07 22:57:18 UTC (rev 22) @@ -0,0 +1,160 @@ +package org.nuiton.redmine.model.io.xpp3; + +import org.nuiton.io.xpp3.PropertyMapper; +import java.beans.BeanInfo; +import java.beans.IntrospectionException; +import java.beans.Introspector; +import java.beans.PropertyDescriptor; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Locale; +import org.apache.commons.lang.StringUtils; +import org.nuiton.io.xpp3.AbstractXpp3Reader; +import org.nuiton.io.xpp3.DataConverter; + +/** + * A base xpp parser for redmin xml streams. + * + * We just define here a convient method to add {@link RedminePropertyMapper} to parser. + * + * To implements a new parser, just implements the {@link #initMappers()} method. + * + * Example : + * <pre> + * + * @Override + * protected void initMappers() throws IntrospectionException { + * + * addMappers(Project.class, RedmineDataConverter.Integer, true, "id"); + * + * addMappers(Project.class, RedmineDataConverter.Boolean, true, "is-public"); + * + * addMappers(Project.class, RedmineDataConverter.Datetime, true, "created-on"); + * + * addMappers(Project.class, RedmineDataConverter.Text, true, "name"); + * } + * </pre> + * + * @author chemit + * @since 1.0.0 + * @see AbstractXpp3Reader + */ +public abstract class RedmineAbstractXpp3Reader extends AbstractXpp3Reader { + + public RedmineAbstractXpp3Reader(Class<?> type) { + super(type, Introspector.decapitalize(type.getSimpleName())); + } + + protected void addMappers(Class<?> srcType, RedmineDataConverter type, boolean onlyOne, String... tagNames) throws IntrospectionException { + for (String tagName : tagNames) { + + // the tag-name is transformed to tagName + String[] parts = tagName.split("-"); + StringBuilder buffer = new StringBuilder(); + for (int i = 0, j = parts.length; i < j; i++) { + if (i == 0) { + buffer.append(parts[i]); + } else { + buffer.append(StringUtils.capitalize(parts[i])); + } + } + String propertyName = buffer.toString(); + BeanInfo beanInfo = Introspector.getBeanInfo(srcType); + PropertyDescriptor descriptor = null; + for (PropertyDescriptor propertyDescriptor : beanInfo.getPropertyDescriptors()) { + if (propertyDescriptor.getName().equals(propertyName)) { + descriptor = propertyDescriptor; + break; + } + } + if (descriptor == null) { + throw new IllegalArgumentException("could not find a property descriptor for property " + propertyName + " of " + srcType); + } + + PropertyMapper mapper = new PropertyMapper.TagTextContentToProperty(tagName, propertyName, type, onlyOne, descriptor); + + allMappers.put(srcType.getName() + "#" + tagName, mapper); + } + } + + /** + * A enumaration to conver some data from a string representation. + * + * Can not use directly a converter from commons-beans library, since we have + * several different converter to use for same type (see {@link #Date} and + * {@link #Datetime}). + * + * @author chemit + * @since 1.0.0 + */ + public enum RedmineDataConverter implements DataConverter { + + Boolean { + + @Override + public Object convert(String t) throws Exception { + Object r = java.lang.Boolean.valueOf(t); + return r; + } + }, Short { + + @Override + public Object convert(String t) throws Exception { + Object r = java.lang.Short.valueOf(t); + return r; + } + }, Integer { + + @Override + public Object convert(String t) throws Exception { + Object r = java.lang.Integer.valueOf(t); + return r; + } + }, Long { + + @Override + public Object convert(String t) throws Exception { + Object r = java.lang.Long.valueOf(t); + return r; + } + }, Float { + + @Override + public Object convert(String t) throws Exception { + Object r = java.lang.Float.valueOf(t); + return r; + } + }, Double { + + @Override + public Object convert(String t) throws Exception { + Object r = java.lang.Double.valueOf(t); + return r; + } + }, Date { + + @Override + public Object convert(String t) throws Exception { + Object r = dateParser.parse(t); + return r; + } + }, Datetime { + + @Override + public Object convert(String t) throws Exception { + Object r = datetimeParser.parse(t); + return r; + } + }, Text { + + @Override + public Object convert(String t) throws Exception { + return t; + } + }; + //FIXME TC20090907 this a a big hack (the + party) redmine returns us a timezone + // in a format we can not deal with (+hh:mm), so actually, ignore it... + static final DateFormat datetimeParser = new SimpleDateFormat("yyyy-MM-dd\'T\'HH:mm:ss\'+\'SS\':\'SS", Locale.US); + static final DateFormat dateParser = new SimpleDateFormat("yyyy-MM-dd", Locale.US); + } +} Property changes on: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/RedmineAbstractXpp3Reader.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: svn:mergeinfo + Added: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/TrackerXpp3Reader.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/TrackerXpp3Reader.java (rev 0) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/TrackerXpp3Reader.java 2009-09-07 22:57:18 UTC (rev 22) @@ -0,0 +1,33 @@ +package org.nuiton.redmine.model.io.xpp3; + +import java.beans.IntrospectionException; +import org.nuiton.redmine.model.Tracker; + +/** + * {@link Tracker} reader. + * + * @author chemit + * @since 1.0.0 + */ +public class TrackerXpp3Reader extends RedmineAbstractXpp3Reader { + + public TrackerXpp3Reader() { + super(Tracker.class); + } + + @Override + protected void initMappers() throws IntrospectionException { + + addMappers(Tracker.class, RedmineDataConverter.Integer, true, + "id", + "project-id", + "tracker-id", + "position"); + + addMappers(Tracker.class, RedmineDataConverter.Boolean, true, + "is-in-chlog", + "is-in-roadmap"); + + addMappers(Tracker.class, RedmineDataConverter.Text, true, "name"); + } +} Property changes on: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/TrackerXpp3Reader.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/UserXpp3Reader.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/UserXpp3Reader.java (rev 0) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/UserXpp3Reader.java 2009-09-07 22:57:18 UTC (rev 22) @@ -0,0 +1,45 @@ +package org.nuiton.redmine.model.io.xpp3; + +import java.beans.IntrospectionException; +import org.nuiton.redmine.model.User; + +/** + * {@link User} reader. + * + * @author chemit + * @since 1.0.0 + */ +public class UserXpp3Reader extends RedmineAbstractXpp3Reader { + + public UserXpp3Reader() { + super(User.class); + } + + @Override + protected void initMappers() throws IntrospectionException { + + addMappers(User.class, RedmineDataConverter.Integer, true, + "id", + "auth-source-id", + "member-id", + "role-id", + "status"); + + addMappers(User.class, RedmineDataConverter.Boolean, true, + "admin", + "mail-notification"); + + addMappers(User.class, RedmineDataConverter.Datetime, true, + "created-on", + "updated-on", + "last-login-on"); + + addMappers(User.class, RedmineDataConverter.Text, true, + "firstname", + "hashed-password", + "language", + "lastname", + "login", + "mail"); + } +} Property changes on: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/UserXpp3Reader.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Copied: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/VersionXpp3Reader.java (from rev 20, maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/VersionsXpp3Reader.java) =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/VersionXpp3Reader.java (rev 0) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/VersionXpp3Reader.java 2009-09-07 22:57:18 UTC (rev 22) @@ -0,0 +1,34 @@ +package org.nuiton.redmine.model.io.xpp3; + +import java.beans.IntrospectionException; +import org.nuiton.redmine.model.Version; + +/** + * {@link Version} reader. + * @author chemit + * @since 1.0.0 + */ +public class VersionXpp3Reader extends RedmineAbstractXpp3Reader { + + public VersionXpp3Reader() { + super(Version.class); + } + + @Override + protected void initMappers() throws IntrospectionException { + + addMappers(Version.class, RedmineDataConverter.Integer, true, + "id", + "project-id"); + + addMappers(Version.class, RedmineDataConverter.Datetime, true, + "created-on", + "updated-on"); + addMappers(Version.class, RedmineDataConverter.Date, true, "effective-date"); + + addMappers(Version.class, RedmineDataConverter.Text, true, + "name", + "description", + "wiki-page-title"); + } +} Property changes on: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/VersionXpp3Reader.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: svn:mergeinfo + Deleted: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/VersionsXpp3Reader.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/VersionsXpp3Reader.java 2009-09-07 22:56:48 UTC (rev 21) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/VersionsXpp3Reader.java 2009-09-07 22:57:18 UTC (rev 22) @@ -1,77 +0,0 @@ -package org.nuiton.redmine.model.io.xpp3; - -import java.io.IOException; -import org.codehaus.plexus.util.xml.pull.XmlPullParser; -import org.codehaus.plexus.util.xml.pull.XmlPullParserException; -import org.nuiton.redmine.model.Version; - -/** - * - * @author chemit - * @since 1.0.0 - */ -public class VersionsXpp3Reader extends AbstractXpp3Reader<Version> { - - @Override - protected Version doParse(XmlPullParser parser, boolean strict) throws IOException, XmlPullParserException { - - Version version = new Version(); - - java.util.Set<String> parsed = new java.util.HashSet<String>(); - int eventType = parser.getEventType(); - boolean foundRoot = false; - while (eventType != XmlPullParser.END_DOCUMENT) { - String txt; - if (eventType == XmlPullParser.START_TAG) { - if (parser.getName().equals("version")) { - foundRoot = true; - } else if (parser.getName().equals("created-on")) { - txt = getText("created-on", parser, parsed); - if (txt != null && !txt.isEmpty()) { - version.setCreatedOn(getDateValue(txt, "yyyy-MM-dd'T'HH:mm:ss'+'SS':'SS", parser)); - } - } else if (parser.getName().equals("updated-on")) { - txt = getText("updated-on", parser, parsed); - if (txt != null && !txt.isEmpty()) { - version.setUpdatedOn(getDateValue(txt,"yyyy-MM-dd'T'HH:mm:ss'+'SS':'SS", parser)); - } - } else if (parser.getName().equals("effective-date")) { - txt = getText("effective-date", parser, parsed); - if (txt != null && !txt.isEmpty()) { - version.setEffectiveDate(getDateValue(txt,"yyyy-MM-dd'T'HH:mm:ss'+'SS':'SS", parser)); - } - } else if (parser.getName().equals("description")) { - txt = getText("description", parser, parsed); - if (txt != null && !txt.isEmpty()) { - version.setDescription(txt); - } - } else if (parser.getName().equals("wiki-page-title")) { - txt = getText("wiki-page-title", parser, parsed); - if (txt != null && !txt.isEmpty()) { - version.setWikiPagetitle(txt); - } - } else if (parser.getName().equals("name")) { - txt = getText("name", parser, parsed); - if (txt != null && !txt.isEmpty()) { - version.setName(txt); - } - } else if (parser.getName().equals("id")) { - txt = getText("id", parser, parsed); - if (txt != null && !txt.isEmpty()) { - version.setId(getIntegerValue(txt, null, parser, strict)); - } - - } else if (parser.getName().equals("project-id")) { - txt = getText("project-id", parser, parsed); - if (txt != null && !txt.isEmpty()) { - version.setProjectId(getIntegerValue(txt, null, parser, strict)); - } - } else if (strict) { - throw new XmlPullParserException("Unrecognised tag: '" + parser.getName() + "'", parser, null); - } - } - eventType = parser.next(); - } - return version; - } -} Added: maven-redmine-plugin/trunk/src/main/resources/META-INF/services/org.nuiton.io.xpp3.Xpp3Reader =================================================================== --- maven-redmine-plugin/trunk/src/main/resources/META-INF/services/org.nuiton.io.xpp3.Xpp3Reader (rev 0) +++ maven-redmine-plugin/trunk/src/main/resources/META-INF/services/org.nuiton.io.xpp3.Xpp3Reader 2009-09-07 22:57:18 UTC (rev 22) @@ -0,0 +1,6 @@ +org.nuiton.redmine.model.io.xpp3.AttachmentXpp3Reader +org.nuiton.redmine.model.io.xpp3.IssueXpp3Reader +org.nuiton.redmine.model.io.xpp3.ProjectXpp3Reader +org.nuiton.redmine.model.io.xpp3.TrackerXpp3Reader +org.nuiton.redmine.model.io.xpp3.UserXpp3Reader +org.nuiton.redmine.model.io.xpp3.VersionXpp3Reader Added: maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/model/ModelBuilderTest.java =================================================================== --- maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/model/ModelBuilderTest.java (rev 0) +++ maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/model/ModelBuilderTest.java 2009-09-07 22:57:18 UTC (rev 22) @@ -0,0 +1,559 @@ +package org.nuiton.redmine.model; + +import java.io.File; +import java.util.ArrayList; +import java.util.Date; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import org.apache.maven.plugin.logging.SystemStreamLog; +import org.codehaus.plexus.PlexusTestCase; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.nuiton.io.xpp3.AbstractXpp3Reader; +import org.nuiton.io.xpp3.Xpp3Helper; +import org.nuiton.io.xpp3.Xpp3Reader; +import org.nuiton.redmine.model.io.xpp3.RedmineAbstractXpp3Reader; +import org.nuiton.io.xpp3.PropertyMapper; +import org.nuiton.redmine.model.io.xpp3.RedmineAbstractXpp3Reader.RedmineDataConverter; + +/** + * + * @author chemit + * @since 1.0.0 + */ +public class ModelBuilderTest { + + protected static File basedir; + protected static File testDir; + protected static ModelBuilder builder; + + protected static File getBaseDir() { + if (basedir == null) { + + String path = PlexusTestCase.getBasedir(); + basedir = new File(path); + } + return basedir; + } + + protected static File getTestDir() { + return testDir; + } + + @BeforeClass + public static void setUpClass() throws Exception { + + String rep = ModelBuilderTest.class.getName(); + rep = rep.replaceAll("\\.", File.separator); + + File f = new File(getBaseDir(), "src" + File.separator + "test" + File.separator + "resources"); + testDir = new File(f, rep).getParentFile(); + System.out.println("test dir : " + testDir); + builder = new ModelBuilder(new SystemStreamLog()); + + String verboseStr = System.getProperty("showGeneratedCode", "false"); + + Boolean verbose = Boolean.valueOf(verboseStr); + if (verbose) { + builder.log.info("showGeneratedCode"); + Iterator<Xpp3Reader> readers = Xpp3Helper.getReaderItetator(); + while (readers.hasNext()) { + Xpp3Reader next = readers.next(); + if (next instanceof AbstractXpp3Reader) { + ((AbstractXpp3Reader) next).setShowGeneratedCode(true); + } + } + } + + } + + @AfterClass + public static void tearDownClass() throws Exception { + } + + @Before + public void setUp() { + } + + @After + public void tearDown() { + } + + /** + * Test of readAttachment method, of class ModelBuilder. + * @throws Exception + */ + @Test + public void testReadAttachment() throws Exception { + File file = new File(testDir, "simple-attachment.xml"); + + Attachment expected = new Attachment(); + expected.setAuthorId((Integer) RedmineDataConverter.Integer.convert("4")); + expected.setContainerId((Integer) RedmineDataConverter.Integer.convert("1")); + expected.setId((Integer) RedmineDataConverter.Integer.convert("1")); + expected.setFilesize((Integer) RedmineDataConverter.Integer.convert("411")); + expected.setDownloads((Integer) RedmineDataConverter.Integer.convert("0")); + expected.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-05T12:56:41+02:00")); + expected.setContainerType((String) RedmineDataConverter.Text.convert("Version")); + expected.setContentType((String) RedmineDataConverter.Text.convert("application/json")); + expected.setDigest((String) RedmineDataConverter.Text.convert("6ea84342c7475c05fb077b4aca832f9a")); + expected.setDiskFilename((String) RedmineDataConverter.Text.convert("090905125641_get_issue.json")); + expected.setFilename((String) RedmineDataConverter.Text.convert("get_issue.json")); + + Attachment actual = builder.readAttachment(file); + + assertMyEquals(expected, actual); + } + + /** + * Test of readIssue method, of class ModelBuilder. + * @throws Exception + */ + @Test + public void testReadIssue() throws Exception { + File file = new File(testDir, "simple-issue.xml"); + + Issue expected = new Issue(); + expected.setAuthorId((Integer) RedmineDataConverter.Integer.convert("5")); + expected.setCategoryId((Integer) RedmineDataConverter.Integer.convert("2")); + expected.setDoneRatio((Integer) RedmineDataConverter.Integer.convert("0")); + expected.setLockVersion((Integer) RedmineDataConverter.Integer.convert("7")); + expected.setPriorityId((Integer) RedmineDataConverter.Integer.convert("4")); + expected.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); + expected.setStatusId((Integer) RedmineDataConverter.Integer.convert("3")); + expected.setTrackerId((Integer) RedmineDataConverter.Integer.convert("1")); + expected.setFixedVersionId((Integer) RedmineDataConverter.Integer.convert("1")); + expected.setId((Integer) RedmineDataConverter.Integer.convert("3")); + expected.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T20:11:52+02:00")); + expected.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T00:37:40+02:00")); + expected.setStartDate((Date) RedmineDataConverter.Date.convert("2009-09-04")); + expected.setDescription((String) RedmineDataConverter.Text.convert("avec une description !")); + expected.setSubject((String) RedmineDataConverter.Text.convert("yes!")); + + Issue actual = builder.readIssue(file); + + assertMyEquals(expected, actual); + } + + /** + * Test of readProject method, of class ModelBuilder. + * @throws Exception + */ + @Test + public void testReadProject() throws Exception { + File file = new File(testDir, "simple-project.xml"); + + Project expected = new Project(); + expected.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T18:11:54+02:00")); + expected.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T18:11:54+02:00")); + expected.setIdentifier((String) RedmineDataConverter.Text.convert("one")); + expected.setName((String) RedmineDataConverter.Text.convert("one")); + expected.setId((Integer) RedmineDataConverter.Integer.convert("1")); + expected.setProjectsCount((Integer) RedmineDataConverter.Integer.convert("0")); + expected.setStatus((Integer) RedmineDataConverter.Integer.convert("1")); + expected.setIsPublic((Boolean) RedmineDataConverter.Boolean.convert("true")); + + Project actual = builder.readProject(file); + + assertMyEquals(expected, actual); + } + + /** + * Test of readTracker method, of class ModelBuilder. + * @throws Exception + */ + @Test + public void testReadTracker() throws Exception { + File file = new File(testDir, "simple-tracker.xml"); + + Tracker expected = new Tracker(); + expected.setId((Integer) RedmineDataConverter.Integer.convert("1")); + expected.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); + expected.setTrackerId((Integer) RedmineDataConverter.Integer.convert("1")); + expected.setPosition((Integer) RedmineDataConverter.Integer.convert("1")); + expected.setIsInChlog((Boolean) RedmineDataConverter.Boolean.convert("true")); + expected.setIsInRoadmap((Boolean) RedmineDataConverter.Boolean.convert("false")); + expected.setName((String) RedmineDataConverter.Text.convert("Anomalie")); + + Tracker actual = builder.readTracker(file); + + assertMyEquals(expected, actual); + } + + /** + * Test of readUser method, of class ModelBuilder. + * @throws Exception + */ + @Test + public void testReadUser() throws Exception { + File file = new File(testDir, "simple-user.xml"); + User expected = new User(); + expected.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T17:24:46+02:00")); + expected.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T01:23:59+02:00")); + expected.setLastLoginOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T01:23:59+02:00")); + expected.setId((Integer) RedmineDataConverter.Integer.convert("1")); + expected.setMemberId((Integer) RedmineDataConverter.Integer.convert("5")); + expected.setRoleId((Integer) RedmineDataConverter.Integer.convert("3")); + expected.setStatus((Integer) RedmineDataConverter.Integer.convert("1")); + expected.setAdmin((Boolean) RedmineDataConverter.Boolean.convert("true")); + expected.setMailNotification((Boolean) RedmineDataConverter.Boolean.convert("true")); + expected.setFirstname((String) RedmineDataConverter.Text.convert("Redmine")); + expected.setHashedPassword((String) RedmineDataConverter.Text.convert("70c881d4a26984ddce795f6f71817c9cf4480e79")); + expected.setLanguage((String) RedmineDataConverter.Text.convert("fr")); + expected.setLastname((String) RedmineDataConverter.Text.convert("Admin")); + expected.setLogin((String) RedmineDataConverter.Text.convert("admin")); + expected.setMail((String) RedmineDataConverter.Text.convert("dummy@codelutin.com")); + + User actual = builder.readUser(file); + + assertMyEquals(expected, actual); + } + + /** + * Test of readVersion method, of class ModelBuilder. + * @throws Exception + */ + @Test + public void testReadVersion() throws Exception { + File file = new File(testDir, "simple-version.xml"); + Version expected = new Version(); + expected.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T18:13:05+02:00")); + expected.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T18:13:05+02:00")); + expected.setName((String) RedmineDataConverter.Text.convert("1.0.0")); + expected.setId((Integer) RedmineDataConverter.Integer.convert("1")); + expected.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); + + Version actual = builder.readVersion(file); + + assertMyEquals(expected, actual); + } + + /** + * Test of readAttachments method, of class ModelBuilder. + * @throws Exception + */ + @Test + public void testReadAttachments() throws Exception { + File file = new File(testDir, "simple-attachments.xml"); + + Attachment i = null; + List<Attachment> expected = new ArrayList<Attachment>(); + i = new Attachment(); + i.setAuthorId((Integer) RedmineDataConverter.Integer.convert("4")); + i.setContainerId((Integer) RedmineDataConverter.Integer.convert("1")); + i.setId((Integer) RedmineDataConverter.Integer.convert("1")); + i.setFilesize((Integer) RedmineDataConverter.Integer.convert("411")); + i.setDownloads((Integer) RedmineDataConverter.Integer.convert("0")); + i.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-05T12:56:41+02:00")); + i.setContainerType((String) RedmineDataConverter.Text.convert("Version")); + i.setContentType((String) RedmineDataConverter.Text.convert("application/json")); + i.setDigest((String) RedmineDataConverter.Text.convert("6ea84342c7475c05fb077b4aca832f9a")); + i.setDiskFilename((String) RedmineDataConverter.Text.convert("090905125641_get_issue.json")); + i.setFilename((String) RedmineDataConverter.Text.convert("get_issue.json")); + expected.add(i); + + Attachment[] actual = builder.readAttachments(file); + + assertMyEquals(expected, actual); + } + + /** + * Test of readIssues method, of class ModelBuilder. + * @throws Exception + */ + @Test + public void testReadIssues() throws Exception { + File file = new File(testDir, "simple-issues.xml"); + + Issue i = null; + List<Issue> expected = new ArrayList<Issue>(); + i = new Issue(); + i.setAuthorId((Integer) RedmineDataConverter.Integer.convert("5")); + i.setCategoryId((Integer) RedmineDataConverter.Integer.convert("2")); + i.setDoneRatio((Integer) RedmineDataConverter.Integer.convert("0")); + i.setLockVersion((Integer) RedmineDataConverter.Integer.convert("7")); + i.setPriorityId((Integer) RedmineDataConverter.Integer.convert("4")); + i.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); + i.setStatusId((Integer) RedmineDataConverter.Integer.convert("3")); + i.setTrackerId((Integer) RedmineDataConverter.Integer.convert("1")); + i.setFixedVersionId((Integer) RedmineDataConverter.Integer.convert("1")); + i.setId((Integer) RedmineDataConverter.Integer.convert("3")); + i.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T20:11:52+02:00")); + i.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T00:37:40+02:00")); + i.setStartDate((Date) RedmineDataConverter.Date.convert("2009-09-04")); + i.setDescription((String) RedmineDataConverter.Text.convert("avec une description !")); + i.setSubject((String) RedmineDataConverter.Text.convert("yes!")); + expected.add(i); + + Issue[] actual = builder.readIssues(file); + + assertMyEquals(expected, actual); + } + + /** + * Test of readProjects method, of class ModelBuilder. + * @throws Exception + */ + @Test + public void testReadProjects() throws Exception { + File file = new File(testDir, "simple-projects.xml"); + + Project i = null; + List<Project> expected = new ArrayList<Project>(); + i = new Project(); + i.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T18:11:54+02:00")); + i.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T18:11:54+02:00")); + i.setIdentifier((String) RedmineDataConverter.Text.convert("one")); + i.setName((String) RedmineDataConverter.Text.convert("one")); + i.setId((Integer) RedmineDataConverter.Integer.convert("1")); + i.setProjectsCount((Integer) RedmineDataConverter.Integer.convert("0")); + i.setStatus((Integer) RedmineDataConverter.Integer.convert("1")); + i.setIsPublic((Boolean) RedmineDataConverter.Boolean.convert("true")); + expected.add(i); + + Project[] actual = builder.readProjects(file); + + assertMyEquals(expected, actual); + } + + /** + * Test of readTrackers method, of class ModelBuilder. + * @throws Exception + */ + @Test + public void testReadTrackers() throws Exception { + File file = new File(testDir, "simple-trackers.xml"); + + Tracker i = null; + List<Tracker> expected = new ArrayList<Tracker>(); + i = new Tracker(); + i.setId((Integer) RedmineDataConverter.Integer.convert("1")); + i.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); + i.setTrackerId((Integer) RedmineDataConverter.Integer.convert("1")); + i.setPosition((Integer) RedmineDataConverter.Integer.convert("1")); + i.setIsInChlog((Boolean) RedmineDataConverter.Boolean.convert("true")); + i.setIsInRoadmap((Boolean) RedmineDataConverter.Boolean.convert("false")); + i.setName((String) RedmineDataConverter.Text.convert("Anomalie")); + expected.add(i); + i = new Tracker(); + i.setId((Integer) RedmineDataConverter.Integer.convert("2")); + i.setIsInChlog((Boolean) RedmineDataConverter.Boolean.convert("true")); + i.setIsInRoadmap((Boolean) RedmineDataConverter.Boolean.convert("true")); + i.setName((String) RedmineDataConverter.Text.convert("Evolution")); + i.setPosition((Integer) RedmineDataConverter.Integer.convert("2")); + i.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); + i.setTrackerId((Integer) RedmineDataConverter.Integer.convert("2")); + expected.add(i); + i = new Tracker(); + i.setId((Integer) RedmineDataConverter.Integer.convert("3")); + i.setIsInChlog((Boolean) RedmineDataConverter.Boolean.convert("false")); + i.setIsInRoadmap((Boolean) RedmineDataConverter.Boolean.convert("false")); + i.setName((String) RedmineDataConverter.Text.convert("Assistance")); + i.setPosition((Integer) RedmineDataConverter.Integer.convert("3")); + i.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); + i.setTrackerId((Integer) RedmineDataConverter.Integer.convert("3")); + expected.add(i); + + Tracker[] actual = builder.readTrackers(file); + + assertMyEquals(expected, actual); + } + + /** + * Test of readUsers method, of class ModelBuilder. + * @throws Exception + */ + @Test + public void testReadUsers() throws Exception { + File file = new File(testDir, "simple-users.xml"); + + User i = null; + List<User> expected = new ArrayList<User>(); + i = new User(); + i.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T17:24:46+02:00")); + i.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T01:23:59+02:00")); + i.setLastLoginOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T01:23:59+02:00")); + i.setId((Integer) RedmineDataConverter.Integer.convert("1")); + i.setMemberId((Integer) RedmineDataConverter.Integer.convert("5")); + i.setRoleId((Integer) RedmineDataConverter.Integer.convert("3")); + i.setStatus((Integer) RedmineDataConverter.Integer.convert("1")); + i.setAdmin((Boolean) RedmineDataConverter.Boolean.convert("true")); + i.setMailNotification((Boolean) RedmineDataConverter.Boolean.convert("true")); + i.setFirstname((String) RedmineDataConverter.Text.convert("Redmine")); + i.setHashedPassword((String) RedmineDataConverter.Text.convert("70c881d4a26984ddce795f6f71817c9cf4480e79")); + i.setLanguage((String) RedmineDataConverter.Text.convert("fr")); + i.setLastname((String) RedmineDataConverter.Text.convert("Admin")); + i.setLogin((String) RedmineDataConverter.Text.convert("admin")); + i.setMail((String) RedmineDataConverter.Text.convert("dummy@codelutin.com")); + expected.add(i); + i = new User(); + i.setAdmin((Boolean) RedmineDataConverter.Boolean.convert("true")); + i.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T19:49:02+02:00")); + i.setFirstname((String) RedmineDataConverter.Text.convert("tony")); + i.setHashedPassword((String) RedmineDataConverter.Text.convert("8aed1322e5450badb078e1fb60a817a1df25a2ca")); + i.setId((Integer) RedmineDataConverter.Integer.convert("5")); + i.setLanguage((String) RedmineDataConverter.Text.convert("fr")); + i.setLastLoginOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T19:49:38+02:00")); + i.setLastname((String) RedmineDataConverter.Text.convert("chemit2")); + i.setLogin((String) RedmineDataConverter.Text.convert("tchemit2")); + i.setMail((String) RedmineDataConverter.Text.convert("chemit@codelutin.com")); + i.setMailNotification((Boolean) RedmineDataConverter.Boolean.convert("false")); + i.setMemberId((Integer) RedmineDataConverter.Integer.convert("4")); + i.setRoleId((Integer) RedmineDataConverter.Integer.convert("3")); + i.setStatus((Integer) RedmineDataConverter.Integer.convert("1")); + i.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T19:49:38+02:00")); + expected.add(i); + i = new User(); + i.setAdmin((Boolean) RedmineDataConverter.Boolean.convert("false")); + i.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-05T16:24:11+02:00")); + i.setFirstname((String) RedmineDataConverter.Text.convert("dev")); + i.setHashedPassword((String) RedmineDataConverter.Text.convert("70c881d4a26984ddce795f6f71817c9cf4480e79")); + i.setId((Integer) RedmineDataConverter.Integer.convert("7")); + i.setLanguage((String) RedmineDataConverter.Text.convert("fr")); + i.setLastLoginOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T16:34:39+02:00")); + i.setLastname((String) RedmineDataConverter.Text.convert("dev")); + i.setLogin((String) RedmineDataConverter.Text.convert("dev")); + i.setMail((String) RedmineDataConverter.Text.convert("dev3@ynot-home.info")); + i.setMailNotification((Boolean) RedmineDataConverter.Boolean.convert("false")); + i.setMemberId((Integer) RedmineDataConverter.Integer.convert("9")); + i.setRoleId((Integer) RedmineDataConverter.Integer.convert("4")); + i.setStatus((Integer) RedmineDataConverter.Integer.convert("1")); + i.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T16:34:39+02:00")); + expected.add(i); + + User[] actual = builder.readUsers(file); + + assertMyEquals(expected, actual); + } + + /** + * Test of readVersions method, of class ModelBuilder. + * @throws Exception + */ + @Test + public void testReadVersions() throws Exception { + File file = new File(testDir, "simple-versions.xml"); + + Version i = null; + List<Version> expected = new ArrayList<Version>(); + i = new Version(); + i.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T02:47:39+02:00")); + i.setDescription((String) RedmineDataConverter.Text.convert("yo")); + i.setId((Integer) RedmineDataConverter.Integer.convert("9")); + i.setName((String) RedmineDataConverter.Text.convert("yor")); + i.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); + i.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T02:50:49+02:00")); + expected.add(i); + i = new Version(); + i.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:05:09+02:00")); + i.setDescription((String) RedmineDataConverter.Text.convert("ysssoye")); + i.setId((Integer) RedmineDataConverter.Integer.convert("13")); + i.setName((String) RedmineDataConverter.Text.convert("rrrrrrrrrouuuuuua")); + i.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); + i.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:05:09+02:00")); + expected.add(i); + i = new Version(); + i.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:07:58+02:00")); + i.setDescription((String) RedmineDataConverter.Text.convert("ysssoye")); + i.setId((Integer) RedmineDataConverter.Integer.convert("15")); + i.setName((String) RedmineDataConverter.Text.convert("aaaauuuuuua")); + i.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); + i.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:07:58+02:00")); + expected.add(i); + i = new Version(); + i.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T04:12:25+02:00")); + i.setDescription((String) RedmineDataConverter.Text.convert("ysssoyeppppppppppppppppp")); + i.setId((Integer) RedmineDataConverter.Integer.convert("16")); + i.setName((String) RedmineDataConverter.Text.convert("aaaau")); + i.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); + i.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T04:13:20+02:00")); + expected.add(i); + i = new Version(); + i.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:05:40+02:00")); + i.setDescription((String) RedmineDataConverter.Text.convert("ysssoye")); + i.setId((Integer) RedmineDataConverter.Integer.convert("14")); + i.setName((String) RedmineDataConverter.Text.convert("aaaaaaaaaarrrrrrrrrouuuuuua")); + i.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); + i.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:05:40+02:00")); + expected.add(i); + i = new Version(); + i.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-05T00:39:15+02:00")); + i.setId((Integer) RedmineDataConverter.Integer.convert("5")); + i.setName((String) RedmineDataConverter.Text.convert("2")); + i.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); + i.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-05T00:39:15+02:00")); + expected.add(i); + i = new Version(); + i.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T18:13:05+02:00")); + i.setId((Integer) RedmineDataConverter.Integer.convert("1")); + i.setName((String) RedmineDataConverter.Text.convert("1.0.0")); + i.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); + i.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T18:13:05+02:00")); + expected.add(i); + i = new Version(); + i.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:00:12+02:00")); + i.setDescription((String) RedmineDataConverter.Text.convert("yoye")); + i.setEffectiveDate((Date) RedmineDataConverter.Date.convert("2009-09-06")); + i.setId((Integer) RedmineDataConverter.Integer.convert("11")); + i.setName((String) RedmineDataConverter.Text.convert("yaouuuuuua")); + i.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); + i.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:00:12+02:00")); + expected.add(i); + i = new Version(); + i.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T02:50:59+02:00")); + i.setDescription((String) RedmineDataConverter.Text.convert("yoye")); + i.setEffectiveDate((Date) RedmineDataConverter.Date.convert("2009-09-06")); + i.setId((Integer) RedmineDataConverter.Integer.convert("10")); + i.setName((String) RedmineDataConverter.Text.convert("ya")); + i.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); + i.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T02:54:16+02:00")); + expected.add(i); + i = new Version(); + i.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:00:37+02:00")); + i.setDescription((String) RedmineDataConverter.Text.convert("ysssoye")); + i.setEffectiveDate((Date) RedmineDataConverter.Date.convert("2009-09-06")); + i.setId((Integer) RedmineDataConverter.Integer.convert("12")); + i.setName((String) RedmineDataConverter.Text.convert("ouuuuuua")); + i.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); + i.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:00:42+02:00")); + expected.add(i); + + Version[] actual = builder.readVersions(file); + + assertMyEquals(expected, actual); + } + + protected <T> void assertMyEquals(List<T> expecteds, T[] actuals) throws Exception { + + Assert.assertNotNull(actuals); + Assert.assertEquals(expecteds.size(), actuals.length); + for (int i = 0, j = expecteds.size(); i < j; i++) { + T actual = actuals[i]; + T expected = expecteds.get(i); + assertMyEquals(expected, actual); + } + + } + + protected void assertMyEquals(Object expected, Object actual) throws Exception { + + Assert.assertNotNull(expected); + Assert.assertNotNull(actual); + RedmineAbstractXpp3Reader reader = (RedmineAbstractXpp3Reader) Xpp3Helper.getReader(expected.getClass()); + Map<String, PropertyMapper> mappers = reader.getMappers(expected.getClass()); + //System.out.println("starting check " + expected); + for (PropertyMapper m : mappers.values()) { + + Object expectedValue = m.getDescriptor().getReadMethod().invoke(expected); + Object actualValue = m.getDescriptor().getReadMethod().invoke(actual); + + Assert.assertEquals("error in attribute " + m.getPropertyName() + " for " + expected, expectedValue, actualValue); + } + + } +} Property changes on: maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/model/ModelBuilderTest.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-attachment.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-attachment.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-attachment.xml 2009-09-07 22:57:18 UTC (rev 22) @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?> +<attachment> + <author-id type="integer">4</author-id> + <container-id type="integer">1</container-id> + <id type="integer">1</id> + <filesize type="integer">411</filesize> + <downloads type="integer">0</downloads> + + <created-on type="datetime">2009-09-05T12:56:41+02:00</created-on> + + <container-type>Version</container-type> + <content-type>application/json</content-type> + <description></description> + <digest>6ea84342c7475c05fb077b4aca832f9a</digest> + <disk-filename>090905125641_get_issue.json</disk-filename> + <filename>get_issue.json</filename> +</attachment> + Copied: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-attachments.xml (from rev 20, maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/simple-files.xml) =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-attachments.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-attachments.xml 2009-09-07 22:57:18 UTC (rev 22) @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?> +<attachments type="array"> + <attachment> + <author-id type="integer">4</author-id> + <container-id type="integer">1</container-id> + <id type="integer">1</id> + <filesize type="integer">411</filesize> + <downloads type="integer">0</downloads> + + <created-on type="datetime">2009-09-05T12:56:41+02:00</created-on> + + <container-type>Version</container-type> + <content-type>application/json</content-type> + <description></description> + <digest>6ea84342c7475c05fb077b4aca832f9a</digest> + <disk-filename>090905125641_get_issue.json</disk-filename> + <filename>get_issue.json</filename> + </attachment> +</attachments> \ No newline at end of file Property changes on: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-attachments.xml ___________________________________________________________________ Added: svn:mergeinfo + Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-issue.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-issue.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-issue.xml 2009-09-07 22:57:18 UTC (rev 22) @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<issue> + <assigned-to-id type="integer" nil="true"></assigned-to-id> + <author-id type="integer">5</author-id> + <category-id type="integer">2</category-id> + <done-ratio type="integer">0</done-ratio> + <lock-version type="integer">7</lock-version> + <priority-id type="integer">4</priority-id> + <project-id type="integer">1</project-id> + <status-id type="integer">3</status-id> + <tracker-id type="integer">1</tracker-id> + <fixed-version-id type="integer">1</fixed-version-id> + <id type="integer">3</id> + + <estimated-hours type="float" nil="true"></estimated-hours> + + <created-on type="datetime">2009-09-04T20:11:52+02:00</created-on> + <updated-on type="datetime">2009-09-06T00:37:40+02:00</updated-on> + <due-date type="date" nil="true"></due-date> + <start-date type="date">2009-09-04</start-date> + + <description>avec une description !</description> + <subject>yes!</subject> +</issue> Copied: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-issues.xml (from rev 20, maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/simple-issues.xml) =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-issues.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-issues.xml 2009-09-07 22:57:18 UTC (rev 22) @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<issues type="array"> + <issue> + <assigned-to-id type="integer" nil="true"></assigned-to-id> + <author-id type="integer">5</author-id> + <category-id type="integer">2</category-id> + <done-ratio type="integer">0</done-ratio> + <lock-version type="integer">7</lock-version> + <priority-id type="integer">4</priority-id> + <project-id type="integer">1</project-id> + <status-id type="integer">3</status-id> + <tracker-id type="integer">1</tracker-id> + <fixed-version-id type="integer">1</fixed-version-id> + <id type="integer">3</id> + + <estimated-hours type="float" nil="true"></estimated-hours> + + <created-on type="datetime">2009-09-04T20:11:52+02:00</created-on> + <updated-on type="datetime">2009-09-06T00:37:40+02:00</updated-on> + <due-date type="date" nil="true"></due-date> + <start-date type="date">2009-09-04</start-date> + + <description>avec une description !</description> + <subject>yes!</subject> + </issue> +</issues> Property changes on: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-issues.xml ___________________________________________________________________ Added: svn:mergeinfo + Copied: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-project.xml (from rev 20, maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/simple-project.xml) =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-project.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-project.xml 2009-09-07 22:57:18 UTC (rev 22) @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project> + <created-on type="datetime">2009-09-04T18:11:54+02:00</created-on> + <updated-on type="datetime">2009-09-04T18:11:54+02:00</updated-on> + + <description></description> + <homepage></homepage> + <identifier>one</identifier> + <name>one</name> + + <id type="integer">1</id> + <parent-id type="integer" nil="true"></parent-id> + <projects-count type="integer">0</projects-count> + <status type="integer">1</status> + + <is-public type="boolean">true</is-public> +</project> Property changes on: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-project.xml ___________________________________________________________________ Added: svn:mergeinfo + Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-projects.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-projects.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-projects.xml 2009-09-07 22:57:18 UTC (rev 22) @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projects type="array"> + <project> + <created-on type="datetime">2009-09-04T18:11:54+02:00</created-on> + <updated-on type="datetime">2009-09-04T18:11:54+02:00</updated-on> + + <description></description> + <homepage></homepage> + <identifier>one</identifier> + <name>one</name> + + <id type="integer">1</id> + <parent-id type="integer" nil="true"></parent-id> + <projects-count type="integer">0</projects-count> + <status type="integer">1</status> + + <is-public type="boolean">true</is-public> + </project> +</projects> \ No newline at end of file Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-tracker.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-tracker.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-tracker.xml 2009-09-07 22:57:18 UTC (rev 22) @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<tracker> + <id type="integer">1</id> + <project-id type="NilClass">1</project-id> + <tracker-id type="NilClass">1</tracker-id> + <position type="integer">1</position> + + <is-in-chlog type="boolean">true</is-in-chlog> + <is-in-roadmap type="boolean">false</is-in-roadmap> + + <name>Anomalie</name> +</tracker> Copied: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-trackers.xml (from rev 20, maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/simple-trackers.xml) =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-trackers.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-trackers.xml 2009-09-07 22:57:18 UTC (rev 22) @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?> +<trackers type="array"> + <tracker> + <id type="integer">1</id> + <project-id type="NilClass">1</project-id> + <tracker-id type="NilClass">1</tracker-id> + <position type="integer">1</position> + + <is-in-chlog type="boolean">true</is-in-chlog> + <is-in-roadmap type="boolean">false</is-in-roadmap> + + <name>Anomalie</name> + </tracker> + <tracker> + <id type="integer">2</id> + <is-in-chlog type="boolean">true</is-in-chlog> + <is-in-roadmap type="boolean">true</is-in-roadmap> + <name>Evolution</name> + <position type="integer">2</position> + <project-id type="NilClass">1</project-id> + <tracker-id type="NilClass">2</tracker-id> + </tracker> + <tracker> + <id type="integer">3</id> + <is-in-chlog type="boolean">false</is-in-chlog> + <is-in-roadmap type="boolean">false</is-in-roadmap> + <name>Assistance</name> + <position type="integer">3</position> + <project-id type="NilClass">1</project-id> + <tracker-id type="NilClass">3</tracker-id> + </tracker> +</trackers> Property changes on: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-trackers.xml ___________________________________________________________________ Added: svn:mergeinfo + Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-user.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-user.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-user.xml 2009-09-07 22:57:18 UTC (rev 22) @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> +<user> + <created-on type="datetime">2009-09-04T17:24:46+02:00</created-on> + <updated-on type="datetime">2009-09-06T01:23:59+02:00</updated-on> + <last-login-on type="datetime">2009-09-06T01:23:59+02:00</last-login-on> + + <id type="integer">1</id> + <auth-source-id type="integer" nil="true"></auth-source-id> + <member-id type="NilClass">5</member-id> + <role-id type="NilClass">3</role-id> + <status type="integer">1</status> + + <admin type="boolean">true</admin> + <mail-notification type="boolean">true</mail-notification> + + <firstname>Redmine</firstname> + <hashed-password>70c881d4a26984ddce795f6f71817c9cf4480e79</hashed-password> + <language>fr</language> + <lastname>Admin</lastname> + <login>admin</login> + <mail>dummy@codelutin.com</mail> +</user> Copied: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-users.xml (from rev 20, maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/simple-users.xml) =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-users.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-users.xml 2009-09-07 22:57:18 UTC (rev 22) @@ -0,0 +1,60 @@ +<?xml version="1.0" encoding="UTF-8"?> +<users type="array"> + <user> + <created-on type="datetime">2009-09-04T17:24:46+02:00</created-on> + <updated-on type="datetime">2009-09-06T01:23:59+02:00</updated-on> + <last-login-on type="datetime">2009-09-06T01:23:59+02:00</last-login-on> + + <id type="integer">1</id> + <auth-source-id type="integer" nil="true"></auth-source-id> + <member-id type="NilClass">5</member-id> + <role-id type="NilClass">3</role-id> + <status type="integer">1</status> + + <admin type="boolean">true</admin> + <mail-notification type="boolean">true</mail-notification> + + <firstname>Redmine</firstname> + <hashed-password>70c881d4a26984ddce795f6f71817c9cf4480e79</hashed-password> + <language>fr</language> + <lastname>Admin</lastname> + <login>admin</login> + <mail>dummy@codelutin.com</mail> + </user> + <user> + <admin type="boolean">true</admin> + <auth-source-id type="integer" nil="true"></auth-source-id> + <created-on type="datetime">2009-09-04T19:49:02+02:00</created-on> + <firstname>tony</firstname> + <hashed-password>8aed1322e5450badb078e1fb60a817a1df25a2ca</hashed-password> + <id type="integer">5</id> + <language>fr</language> + <last-login-on type="datetime">2009-09-04T19:49:38+02:00</last-login-on> + <lastname>chemit2</lastname> + <login>tchemit2</login> + <mail>chemit@codelutin.com</mail> + <mail-notification type="boolean">false</mail-notification> + <member-id type="NilClass">4</member-id> + <role-id type="NilClass">3</role-id> + <status type="integer">1</status> + <updated-on type="datetime">2009-09-04T19:49:38+02:00</updated-on> + </user> + <user> + <admin type="boolean">false</admin> + <auth-source-id type="integer" nil="true"></auth-source-id> + <created-on type="datetime">2009-09-05T16:24:11+02:00</created-on> + <firstname>dev</firstname> + <hashed-password>70c881d4a26984ddce795f6f71817c9cf4480e79</hashed-password> + <id type="integer">7</id> + <language>fr</language> + <last-login-on type="datetime">2009-09-06T16:34:39+02:00</last-login-on> + <lastname>dev</lastname> + <login>dev</login> + <mail>dev3@ynot-home.info</mail> + <mail-notification type="boolean">false</mail-notification> + <member-id type="NilClass">9</member-id> + <role-id type="NilClass">4</role-id> + <status type="integer">1</status> + <updated-on type="datetime">2009-09-06T16:34:39+02:00</updated-on> + </user> +</users> Property changes on: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-users.xml ___________________________________________________________________ Added: svn:mergeinfo + Copied: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-version.xml (from rev 20, maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/simple-version.xml) =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-version.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-version.xml 2009-09-07 22:57:18 UTC (rev 22) @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8"?> +<version> + <created-on type="datetime">2009-09-04T18:13:05+02:00</created-on> + <updated-on type="datetime">2009-09-04T18:13:05+02:00</updated-on> + <effective-date type="date" nil="true"></effective-date> + + <name>1.0.0</name> + <description></description> + <wiki-page-title nil="true"></wiki-page-title> + + <id type="integer">1</id> + <project-id type="integer">1</project-id> +</version> Property changes on: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-version.xml ___________________________________________________________________ Added: svn:mergeinfo + Copied: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-versions.xml (from rev 20, maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/simple-versions.xml) =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-versions.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-versions.xml 2009-09-07 22:57:18 UTC (rev 22) @@ -0,0 +1,103 @@ +<?xml version="1.0" encoding="UTF-8"?> +<versions type="array"> + <version> + <created-on type="datetime">2009-09-06T02:47:39+02:00</created-on> + <description>yo</description> + <effective-date type="date" nil="true"></effective-date> + <id type="integer">9</id> + <name>yor</name> + <project-id type="integer">1</project-id> + <updated-on type="datetime">2009-09-06T02:50:49+02:00</updated-on> + <wiki-page-title nil="true"></wiki-page-title> + </version> + <version> + <created-on type="datetime">2009-09-06T03:05:09+02:00</created-on> + <description>ysssoye</description> + <effective-date type="date" nil="true"></effective-date> + <id type="integer">13</id> + <name>rrrrrrrrrouuuuuua</name> + <project-id type="integer">1</project-id> + <updated-on type="datetime">2009-09-06T03:05:09+02:00</updated-on> + <wiki-page-title nil="true"></wiki-page-title> + </version> + <version> + <created-on type="datetime">2009-09-06T03:07:58+02:00</created-on> + <description>ysssoye</description> + <effective-date type="date" nil="true"></effective-date> + <id type="integer">15</id> + <name>aaaauuuuuua</name> + <project-id type="integer">1</project-id> + <updated-on type="datetime">2009-09-06T03:07:58+02:00</updated-on> + <wiki-page-title nil="true"></wiki-page-title> + </version> + <version> + <created-on type="datetime">2009-09-06T04:12:25+02:00</created-on> + <description>ysssoyeppppppppppppppppp</description> + <effective-date type="date" nil="true"></effective-date> + <id type="integer">16</id> + <name>aaaau</name> + <project-id type="integer">1</project-id> + <updated-on type="datetime">2009-09-06T04:13:20+02:00</updated-on> + <wiki-page-title nil="true"></wiki-page-title> + </version> + <version> + <created-on type="datetime">2009-09-06T03:05:40+02:00</created-on> + <description>ysssoye</description> + <effective-date type="date" nil="true"></effective-date> + <id type="integer">14</id> + <name>aaaaaaaaaarrrrrrrrrouuuuuua</name> + <project-id type="integer">1</project-id> + <updated-on type="datetime">2009-09-06T03:05:40+02:00</updated-on> + <wiki-page-title nil="true"></wiki-page-title> + </version> + <version> + <created-on type="datetime">2009-09-05T00:39:15+02:00</created-on> + <description></description> + <effective-date type="date" nil="true"></effective-date> + <id type="integer">5</id> + <name>2</name> + <project-id type="integer">1</project-id> + <updated-on type="datetime">2009-09-05T00:39:15+02:00</updated-on> + <wiki-page-title nil="true"></wiki-page-title> + </version> + <version> + <created-on type="datetime">2009-09-04T18:13:05+02:00</created-on> + <description></description> + <effective-date type="date" nil="true"></effective-date> + <id type="integer">1</id> + <name>1.0.0</name> + <project-id type="integer">1</project-id> + <updated-on type="datetime">2009-09-04T18:13:05+02:00</updated-on> + <wiki-page-title nil="true"></wiki-page-title> + </version> + <version> + <created-on type="datetime">2009-09-06T03:00:12+02:00</created-on> + <description>yoye</description> + <effective-date type="date">2009-09-06</effective-date> + <id type="integer">11</id> + <name>yaouuuuuua</name> + <project-id type="integer">1</project-id> + <updated-on type="datetime">2009-09-06T03:00:12+02:00</updated-on> + <wiki-page-title nil="true"></wiki-page-title> + </version> + <version> + <created-on type="datetime">2009-09-06T02:50:59+02:00</created-on> + <description>yoye</description> + <effective-date type="date">2009-09-06</effective-date> + <id type="integer">10</id> + <name>ya</name> + <project-id type="integer">1</project-id> + <updated-on type="datetime">2009-09-06T02:54:16+02:00</updated-on> + <wiki-page-title nil="true"></wiki-page-title> + </version> + <version> + <created-on type="datetime">2009-09-06T03:00:37+02:00</created-on> + <description>ysssoye</description> + <effective-date type="date">2009-09-06</effective-date> + <id type="integer">12</id> + <name>ouuuuuua</name> + <project-id type="integer">1</project-id> + <updated-on type="datetime">2009-09-06T03:00:42+02:00</updated-on> + <wiki-page-title nil="true"></wiki-page-title> + </version> +</versions> Property changes on: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/simple-versions.xml ___________________________________________________________________ Added: svn:mergeinfo +