Rewrite DateFormatter to use timezone passed in from config Allows us to get rid of the ugly builder interface, which is nice. The implementation is also simplified by storing the ThreadLocals in the Format enum, since we were previously just storing a mapping of enum to cached DateFormat anyway. Change-Id: I59e4a64e426a05ea822b736a1770c54b8174f4ae
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/CommitJsonData.java b/gitiles-servlet/src/main/java/com/google/gitiles/CommitJsonData.java index 99e7980..86141c3 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/CommitJsonData.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/CommitJsonData.java
@@ -20,7 +20,6 @@ import com.google.common.collect.Sets; import com.google.gitiles.CommitData.DiffList; import com.google.gitiles.CommitData.Field; -import com.google.gitiles.DateFormatterBuilder.DateFormatter; import org.eclipse.jgit.diff.DiffEntry; import org.eclipse.jgit.lib.PersonIdent;
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/CommitSoyData.java b/gitiles-servlet/src/main/java/com/google/gitiles/CommitSoyData.java index 3bb4f41..045e499 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/CommitSoyData.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/CommitSoyData.java
@@ -26,7 +26,6 @@ import com.google.common.collect.Sets; import com.google.gitiles.CommitData.DiffList; import com.google.gitiles.CommitData.Field; -import com.google.gitiles.DateFormatterBuilder.DateFormatter; import com.google.template.soy.data.restricted.NullData; import org.eclipse.jgit.diff.DiffEntry;
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/ConfigUtil.java b/gitiles-servlet/src/main/java/com/google/gitiles/ConfigUtil.java index 4f8733b..e4dc44d 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/ConfigUtil.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/ConfigUtil.java
@@ -14,6 +14,7 @@ package com.google.gitiles; +import com.google.common.base.Optional; import com.google.common.base.Predicates; import com.google.common.cache.CacheBuilder; import com.google.common.collect.ImmutableList; @@ -22,6 +23,7 @@ import org.eclipse.jgit.lib.Config; import org.joda.time.Duration; +import java.util.TimeZone; import java.util.concurrent.TimeUnit; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -127,6 +129,24 @@ return b; } + /** + * Get a {@link TimeZone} from a config. + * + * @param config JGit config object. + * @param section section to read, e.g. "gitiles". + * @param subsection subsection to read, e.g. "subsection". + * @param name variable to read, e.g. "fixedTimeZone". + * @return a time zone read from parsing the specified config string value, or + * {@link Optional#absent()} if not present. As in the behavior of + * {@link TimeZone#getTimeZone(String)}, unknown time zones are treated as + * GMT. + */ + public static Optional<TimeZone> getTimeZone(Config config, String section, String subsection, + String name) { + String id = config.getString(section, subsection, name); + return id != null ? Optional.of(TimeZone.getTimeZone(id)) : Optional.<TimeZone> absent(); + } + private static Matcher matcher(String pattern, String valStr) { return Pattern.compile(pattern).matcher(valStr); }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/DateFormatter.java b/gitiles-servlet/src/main/java/com/google/gitiles/DateFormatter.java new file mode 100644 index 0000000..e7a2828 --- /dev/null +++ b/gitiles-servlet/src/main/java/com/google/gitiles/DateFormatter.java
@@ -0,0 +1,88 @@ +// Copyright (C) 2014 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.gitiles; + +import com.google.common.base.Optional; + +import org.eclipse.jgit.lib.PersonIdent; +import org.eclipse.jgit.util.SystemReader; + +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.TimeZone; + +/** Date formatter similar in spirit to JGit's {@code GitDateFormatter}. */ +public class DateFormatter { + public static enum Format { + // Format strings should match org.eclipse.jgit.util.GitDateFormatter except + // for the timezone suffix. + DEFAULT("EEE MMM dd HH:mm:ss yyyy"), + ISO("yyyy-MM-dd HH:mm:ss"); + + private final String fmt; + private final ThreadLocal<DateFormat> defaultFormat; + private final ThreadLocal<DateFormat> fixedTzFormat; + + private Format(String fmt) { + this.fmt = fmt; + this.defaultFormat = new ThreadLocal<>(); + this.fixedTzFormat = new ThreadLocal<>(); + } + + private DateFormat getDateFormat(Optional<TimeZone> fixedTz) { + DateFormat df; + if (fixedTz.isPresent()) { + df = fixedTzFormat.get(); + if (df == null) { + df = new SimpleDateFormat(fmt); + fixedTzFormat.set(df); + } + df.setTimeZone(fixedTz.get()); + } else { + df = defaultFormat.get(); + if (df == null) { + df = new SimpleDateFormat(fmt + " Z"); + defaultFormat.set(df); + } + } + return df; + } + } + + private final Optional<TimeZone> fixedTz; + private final Format format; + + public DateFormatter(Optional<TimeZone> fixedTz, Format format) { + this.fixedTz = fixedTz; + this.format = format; + } + + public DateFormatter(GitilesAccess access, Format format) throws IOException { + this(ConfigUtil.getTimeZone(access.getConfig(), "gitiles", null, "fixedTimeZone"), format); + } + + public String format(PersonIdent ident) { + DateFormat df = format.getDateFormat(fixedTz); + if (!fixedTz.isPresent()) { + TimeZone tz = ident.getTimeZone(); + if (tz == null) { + tz = SystemReader.getInstance().getTimeZone(); + } + df.setTimeZone(tz); + } + return df.format(ident.getWhen()); + } +}
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/DateFormatterBuilder.java b/gitiles-servlet/src/main/java/com/google/gitiles/DateFormatterBuilder.java deleted file mode 100644 index e7c0549..0000000 --- a/gitiles-servlet/src/main/java/com/google/gitiles/DateFormatterBuilder.java +++ /dev/null
@@ -1,97 +0,0 @@ -// Copyright (C) 2014 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package com.google.gitiles; - -import com.google.common.base.Optional; -import com.google.common.collect.Lists; - -import org.eclipse.jgit.lib.PersonIdent; -import org.eclipse.jgit.util.SystemReader; - -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.List; -import java.util.TimeZone; - -/** Date formatter similar in spirit to JGit's {@code GitDateFormatter}. */ -public class DateFormatterBuilder { - public static enum Format { - // Format strings should match org.eclipse.jgit.util.GitDateFormatter except - // for the timezone suffix. - DEFAULT("EEE MMM dd HH:mm:ss yyyy"), - ISO("yyyy-MM-dd HH:mm:ss"); - - private final String fmt; - - private Format(String fmt) { - this.fmt = fmt; - } - } - - public class DateFormatter { - private final Format format; - - private DateFormatter(Format format) { - this.format = format; - } - - public String format(PersonIdent ident) { - DateFormat df = getDateFormat(format); - if (!fixedTz.isPresent()) { - TimeZone tz = ident.getTimeZone(); - if (tz == null) { - tz = SystemReader.getInstance().getTimeZone(); - } - df.setTimeZone(tz); - } - return df.format(ident.getWhen()); - } - } - - private final Optional<TimeZone> fixedTz; - private final ThreadLocal<List<DateFormat>> dfs; - - DateFormatterBuilder(Optional<TimeZone> fixedTz) { - this.fixedTz = fixedTz; - this.dfs = new ThreadLocal<List<DateFormat>>(); - } - - public DateFormatter create(Format format) { - return new DateFormatter(format); - } - - private DateFormat getDateFormat(Format format) { - List<DateFormat> result = dfs.get(); - if (result == null) { - int n = Format.values().length; - result = Lists.newArrayListWithCapacity(n); - for (int i = 0; i < n; i++) { - result.add(null); - } - dfs.set(result); - } - DateFormat df = result.get(format.ordinal()); - if (df == null) { - if (fixedTz.isPresent()) { - df = new SimpleDateFormat(format.fmt); - df.setTimeZone(fixedTz.get()); - } else { - df = new SimpleDateFormat(format.fmt + " Z"); - } - result.set(format.ordinal(), df); - } - return result.get(format.ordinal()); - } -}
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/DiffServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/DiffServlet.java index 3be0af1..aa95dec 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/DiffServlet.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/DiffServlet.java
@@ -19,8 +19,7 @@ import com.google.common.base.Charsets; import com.google.gitiles.CommitData.Field; -import com.google.gitiles.DateFormatterBuilder.DateFormatter; -import com.google.gitiles.DateFormatterBuilder.Format; +import com.google.gitiles.DateFormatter.Format; import org.eclipse.jgit.diff.DiffFormatter; import org.eclipse.jgit.errors.IncorrectObjectTypeException; @@ -51,13 +50,10 @@ private static final long serialVersionUID = 1L; private static final String PLACEHOLDER = "id=\"DIFF_OUTPUT_BLOCK\""; - private final DateFormatterBuilder dfb; private final Linkifier linkifier; - public DiffServlet(DateFormatterBuilder dfb, GitilesAccess.Factory accessFactory, - Renderer renderer, Linkifier linkifier) { + public DiffServlet(GitilesAccess.Factory accessFactory, Renderer renderer, Linkifier linkifier) { super(renderer, accessFactory); - this.dfb = checkNotNull(dfb, "dfb"); this.linkifier = checkNotNull(linkifier, "linkifier"); } @@ -97,10 +93,11 @@ if (isFile) { fs = Field.setOf(fs, Field.PARENT_BLAME_URL); } - DateFormatter df = dfb.create(Format.DEFAULT); + GitilesAccess access = getAccess(req); + DateFormatter df = new DateFormatter(access, Format.DEFAULT); data.put("commit", new CommitSoyData() .setLinkifier(linkifier) - .setArchiveFormat(getArchiveFormat(getAccess(req))) + .setArchiveFormat(getArchiveFormat(access)) .toSoyData(req, walk.parseCommit(view.getRevision().getId()), fs, df)); } if (!data.containsKey("repositoryName") && (view.getRepositoryName() != null)) {
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesFilter.java b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesFilter.java index e4de1c0..5c765d8 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesFilter.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesFilter.java
@@ -21,7 +21,6 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Objects; -import com.google.common.base.Optional; import com.google.common.collect.FluentIterable; import com.google.common.collect.ImmutableMap; import com.google.common.collect.LinkedListMultimap; @@ -51,7 +50,6 @@ import java.util.Arrays; import java.util.Iterator; import java.util.Map; -import java.util.TimeZone; import java.util.regex.Pattern; import javax.servlet.Filter; @@ -172,7 +170,6 @@ private TimeCache timeCache; private BlameCache blameCache; private GitwebRedirectFilter gitwebRedirect; - private DateFormatterBuilder dateFormatterBuilder; private boolean initialized; GitilesFilter() { @@ -241,23 +238,23 @@ case HOST_INDEX: return new HostIndexServlet(accessFactory, renderer, urls); case REPOSITORY_INDEX: - return new RepositoryIndexServlet(accessFactory, renderer, dateFormatterBuilder, timeCache); + return new RepositoryIndexServlet(accessFactory, renderer, timeCache); case REFS: return new RefServlet(accessFactory, renderer, timeCache); case REVISION: - return new RevisionServlet(accessFactory, renderer, dateFormatterBuilder, linkifier()); + return new RevisionServlet(accessFactory, renderer, linkifier()); case PATH: return new PathServlet(accessFactory, renderer, urls); case DIFF: - return new DiffServlet(dateFormatterBuilder, accessFactory, renderer, linkifier()); + return new DiffServlet(accessFactory, renderer, linkifier()); case LOG: - return new LogServlet(accessFactory, renderer, dateFormatterBuilder, linkifier()); + return new LogServlet(accessFactory, renderer, linkifier()); case DESCRIBE: return new DescribeServlet(accessFactory); case ARCHIVE: return new ArchiveServlet(accessFactory); case BLAME: - return new BlameServlet(accessFactory, renderer, dateFormatterBuilder, blameCache); + return new BlameServlet(accessFactory, renderer, blameCache); default: throw new IllegalArgumentException("Invalid view type: " + view); } @@ -313,7 +310,6 @@ setDefaultTimeCache(); setDefaultBlameCache(); setDefaultGitwebRedirect(); - setDefaultDateFormatterBuilder(); } private void setDefaultConfig(FilterConfig filterConfig) throws ServletException { @@ -423,19 +419,6 @@ } } - private void setDefaultDateFormatterBuilder() { - if (dateFormatterBuilder == null) { - String tzStr = config.getString("gitiles", null, "fixedTimeZone"); - Optional<TimeZone> tz; - if (tzStr == null) { - tz = Optional.absent(); - } else { - tz = Optional.of(TimeZone.getTimeZone(tzStr)); - } - dateFormatterBuilder = new DateFormatterBuilder(tz); - } - } - private static String getBaseGitUrl(Config config) throws ServletException { String baseGitUrl = config.getString("gitiles", null, "baseGitUrl"); if (baseGitUrl == null) {
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java index c2fafbb..e442be5 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java
@@ -25,8 +25,7 @@ import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.primitives.Longs; -import com.google.gitiles.DateFormatterBuilder.DateFormatter; -import com.google.gitiles.DateFormatterBuilder.Format; +import com.google.gitiles.DateFormatter.Format; import com.google.gson.reflect.TypeToken; import org.eclipse.jgit.errors.IncorrectObjectTypeException; @@ -67,13 +66,10 @@ private static final int DEFAULT_LIMIT = 100; private static final int MAX_LIMIT = 10000; - private final DateFormatterBuilder dfb; private final Linkifier linkifier; - public LogServlet(GitilesAccess.Factory accessFactory, Renderer renderer, - DateFormatterBuilder dfb, Linkifier linkifier) { + public LogServlet(GitilesAccess.Factory accessFactory, Renderer renderer, Linkifier linkifier) { super(renderer, accessFactory); - this.dfb = checkNotNull(dfb, "dfb"); this.linkifier = checkNotNull(linkifier, "linkifier"); } @@ -88,7 +84,8 @@ } try { - DateFormatter df = dfb.create(Format.DEFAULT); + GitilesAccess access = getAccess(req); + DateFormatter df = new DateFormatter(access, Format.DEFAULT); Map<String, Object> data = new LogSoyData(req, view).toSoyData(paginator, null, df); if (!view.getRevision().nameIsId()) { @@ -111,7 +108,7 @@ } data.put("title", title); - GitilesConfig.putVariant(getAccess(req).getConfig(), "logEntry", "logEntryVariant", data); + GitilesConfig.putVariant(access.getConfig(), "logEntry", "logEntryVariant", data); renderHtml(req, res, "gitiles.logDetail", data); } catch (RevWalkException e) { @@ -134,7 +131,7 @@ } try { - DateFormatter df = dfb.create(Format.DEFAULT); + DateFormatter df = new DateFormatter(getAccess(req), Format.DEFAULT); Map<String, Object> result = Maps.newLinkedHashMap(); List<CommitJsonData.Commit> entries = Lists.newArrayListWithCapacity(paginator.getLimit()); for (RevCommit c : paginator) {
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/LogSoyData.java b/gitiles-servlet/src/main/java/com/google/gitiles/LogSoyData.java index 71cec89..a4be388 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/LogSoyData.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/LogSoyData.java
@@ -19,7 +19,6 @@ import com.google.common.collect.Maps; import com.google.common.collect.Sets; import com.google.gitiles.CommitData.Field; -import com.google.gitiles.DateFormatterBuilder.DateFormatter; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.revwalk.RevCommit;
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java index 0df8aec..7dde342 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java
@@ -20,8 +20,7 @@ import com.google.common.base.Strings; import com.google.common.collect.ImmutableList; import com.google.common.collect.Maps; -import com.google.gitiles.DateFormatterBuilder.DateFormatter; -import com.google.gitiles.DateFormatterBuilder.Format; +import com.google.gitiles.DateFormatter.Format; import org.eclipse.jgit.http.server.ServletUtils; import org.eclipse.jgit.lib.Constants; @@ -45,13 +44,11 @@ static final int REF_LIMIT = 10; private static final int LOG_LIMIT = 20; - private final DateFormatterBuilder dfb; private final TimeCache timeCache; public RepositoryIndexServlet(GitilesAccess.Factory accessFactory, Renderer renderer, - DateFormatterBuilder dfb, TimeCache timeCache) { + TimeCache timeCache) { super(renderer, accessFactory); - this.dfb = checkNotNull(dfb, "dfb"); this.timeCache = checkNotNull(timeCache, "timeCache"); } @@ -64,7 +61,8 @@ Map<String, ?> buildData(HttpServletRequest req) throws IOException { GitilesView view = ViewFilter.getView(req); Repository repo = ServletUtils.getRepository(req); - RepositoryDescription desc = getAccess(req).getRepositoryDescription(); + GitilesAccess access = getAccess(req); + RepositoryDescription desc = access.getRepositoryDescription(); RevWalk walk = new RevWalk(repo); List<Map<String, Object>> tags; Map<String, Object> data; @@ -76,7 +74,7 @@ if (head.getType() == Constants.OBJ_COMMIT) { walk.reset(); walk.markStart((RevCommit) head); - DateFormatter df = dfb.create(Format.DEFAULT); + DateFormatter df = new DateFormatter(access, Format.DEFAULT); data = new LogSoyData(req, view).toSoyData(walk, LOG_LIMIT, "HEAD", null, df); } else { // TODO(dborowitz): Handle non-commit or missing HEAD?
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/RevisionServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/RevisionServlet.java index 565cf76..987ade8 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/RevisionServlet.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/RevisionServlet.java
@@ -26,8 +26,7 @@ import com.google.common.collect.Lists; import com.google.gitiles.CommitData.Field; import com.google.gitiles.CommitJsonData.Commit; -import com.google.gitiles.DateFormatterBuilder.DateFormatter; -import com.google.gitiles.DateFormatterBuilder.Format; +import com.google.gitiles.DateFormatter.Format; import org.eclipse.jgit.errors.IncorrectObjectTypeException; import org.eclipse.jgit.errors.MissingObjectException; @@ -59,13 +58,11 @@ private static final long serialVersionUID = 1L; private static final Logger log = LoggerFactory.getLogger(RevisionServlet.class); - private final DateFormatterBuilder dfb; private final Linkifier linkifier; public RevisionServlet(GitilesAccess.Factory accessFactory, Renderer renderer, - DateFormatterBuilder dfb, Linkifier linkifier) { + Linkifier linkifier) { super(renderer, accessFactory); - this.dfb = checkNotNull(dfb, "dfb"); this.linkifier = checkNotNull(linkifier, "linkifier"); } @@ -73,10 +70,11 @@ protected void doGetHtml(HttpServletRequest req, HttpServletResponse res) throws IOException { GitilesView view = ViewFilter.getView(req); Repository repo = ServletUtils.getRepository(req); + GitilesAccess access = getAccess(req); RevWalk walk = new RevWalk(repo); try { - DateFormatter df = dfb.create(Format.DEFAULT); + DateFormatter df = new DateFormatter(access, Format.DEFAULT); List<RevObject> objects = listObjects(walk, view.getRevision()); List<Map<String, ?>> soyObjects = Lists.newArrayListWithCapacity(objects.size()); boolean hasBlob = false; @@ -91,7 +89,7 @@ "data", new CommitSoyData() .setLinkifier(linkifier) .setRevWalk(walk) - .setArchiveFormat(getArchiveFormat(getAccess(req))) + .setArchiveFormat(getArchiveFormat(access)) .toSoyData(req, (RevCommit) obj, COMMIT_SOY_FIELDS, df))); break; case OBJ_TREE: @@ -142,7 +140,7 @@ RevWalk walk = new RevWalk(repo); try { - DateFormatter df = dfb.create(Format.DEFAULT); + DateFormatter df = new DateFormatter(getAccess(req), Format.DEFAULT); RevObject obj = walk.parseAny(view.getRevision().getId()); switch (obj.getType()) { case OBJ_COMMIT:
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/TagSoyData.java b/gitiles-servlet/src/main/java/com/google/gitiles/TagSoyData.java index e715cdd..8401551 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/TagSoyData.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/TagSoyData.java
@@ -15,7 +15,6 @@ package com.google.gitiles; import com.google.common.collect.Maps; -import com.google.gitiles.DateFormatterBuilder.DateFormatter; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.revwalk.RevTag;
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/blame/BlameServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/blame/BlameServlet.java index 1530916..2b37f47 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/blame/BlameServlet.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/blame/BlameServlet.java
@@ -24,9 +24,8 @@ import com.google.gitiles.BaseServlet; import com.google.gitiles.BlobSoyData; import com.google.gitiles.CommitSoyData; -import com.google.gitiles.DateFormatterBuilder; -import com.google.gitiles.DateFormatterBuilder.DateFormatter; -import com.google.gitiles.DateFormatterBuilder.Format; +import com.google.gitiles.DateFormatter; +import com.google.gitiles.DateFormatter.Format; import com.google.gitiles.GitilesAccess; import com.google.gitiles.GitilesView; import com.google.gitiles.Renderer; @@ -55,13 +54,10 @@ public class BlameServlet extends BaseServlet { private static final long serialVersionUID = 1L; - private final DateFormatterBuilder dfb; private final BlameCache cache; - public BlameServlet(GitilesAccess.Factory accessFactory, Renderer renderer, - DateFormatterBuilder dfb, BlameCache cache) { + public BlameServlet(GitilesAccess.Factory accessFactory, Renderer renderer, BlameCache cache) { super(renderer, accessFactory); - this.dfb = checkNotNull(dfb, "dfb"); this.cache = checkNotNull(cache, "cache"); } @@ -88,7 +84,7 @@ res.setStatus(SC_NOT_FOUND); return; } - DateFormatter df = dfb.create(Format.ISO); + DateFormatter df = new DateFormatter(getAccess(req), Format.ISO); renderHtml(req, res, "gitiles.blameDetail", ImmutableMap.of( "title", title, "breadcrumbs", view.getBreadcrumbs(),
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/DateFormatterBuilderTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/DateFormatterTest.java similarity index 63% rename from gitiles-servlet/src/test/java/com/google/gitiles/DateFormatterBuilderTest.java rename to gitiles-servlet/src/test/java/com/google/gitiles/DateFormatterTest.java index 915a9ef..2431fbb 100644 --- a/gitiles-servlet/src/test/java/com/google/gitiles/DateFormatterBuilderTest.java +++ b/gitiles-servlet/src/test/java/com/google/gitiles/DateFormatterTest.java
@@ -14,11 +14,12 @@ package com.google.gitiles; +import static com.google.gitiles.DateFormatter.Format.DEFAULT; +import static com.google.gitiles.DateFormatter.Format.ISO; +import static java.util.TimeZone.getTimeZone; import static org.junit.Assert.assertEquals; import com.google.common.base.Optional; -import static com.google.gitiles.DateFormatterBuilder.Format.DEFAULT; -import static com.google.gitiles.DateFormatterBuilder.Format.ISO; import org.eclipse.jgit.lib.PersonIdent; import org.eclipse.jgit.util.GitDateParser; @@ -28,59 +29,53 @@ import java.util.Date; import java.util.TimeZone; -public class DateFormatterBuilderTest { +public class DateFormatterTest { @Test public void defaultIncludingTimeZone() throws Exception { - DateFormatterBuilder dfb = - new DateFormatterBuilder(Optional.<TimeZone> absent()); PersonIdent ident = newIdent("Mon Jan 2 15:04:05 2006", "-0700"); - assertEquals("Mon Jan 02 15:04:05 2006 -0700", dfb.create(DEFAULT).format(ident)); + DateFormatter df = new DateFormatter(Optional.<TimeZone> absent(), DEFAULT); + assertEquals("Mon Jan 02 15:04:05 2006 -0700", df.format(ident)); } @Test public void defaultWithUtc() throws Exception { - DateFormatterBuilder dfb = - new DateFormatterBuilder(Optional.of(TimeZone.getTimeZone("UTC"))); PersonIdent ident = newIdent("Mon Jan 2 15:04:05 2006", "-0700"); - assertEquals("Mon Jan 02 22:04:05 2006", dfb.create(DEFAULT).format(ident)); + DateFormatter df = new DateFormatter(Optional.of(getTimeZone("UTC")), DEFAULT); + assertEquals("Mon Jan 02 22:04:05 2006", df.format(ident)); } @Test public void defaultWithOtherTimeZone() throws Exception { - DateFormatterBuilder dfb = - new DateFormatterBuilder(Optional.of(TimeZone.getTimeZone("GMT-0400"))); PersonIdent ident = newIdent("Mon Jan 2 15:04:05 2006", "-0700"); - assertEquals("Mon Jan 02 18:04:05 2006", dfb.create(DEFAULT).format(ident)); + DateFormatter df = new DateFormatter(Optional.of(getTimeZone("GMT-0400")), DEFAULT); + assertEquals("Mon Jan 02 18:04:05 2006", df.format(ident)); } @Test public void isoIncludingTimeZone() throws Exception { - DateFormatterBuilder dfb = - new DateFormatterBuilder(Optional.<TimeZone> absent()); PersonIdent ident = newIdent("Mon Jan 2 15:04:05 2006", "-0700"); - assertEquals("2006-01-02 15:04:05 -0700", dfb.create(ISO).format(ident)); + DateFormatter df = new DateFormatter(Optional.<TimeZone> absent(), ISO); + assertEquals("2006-01-02 15:04:05 -0700", df.format(ident)); } @Test public void isoWithUtc() throws Exception { - DateFormatterBuilder dfb = - new DateFormatterBuilder(Optional.of(TimeZone.getTimeZone("UTC"))); PersonIdent ident = newIdent("Mon Jan 2 15:04:05 2006", "-0700"); - assertEquals("2006-01-02 22:04:05", dfb.create(ISO).format(ident)); + DateFormatter df = new DateFormatter(Optional.of(getTimeZone("UTC")), ISO); + assertEquals("2006-01-02 22:04:05", df.format(ident)); } @Test public void isoWithOtherTimeZone() throws Exception { - DateFormatterBuilder dfb = - new DateFormatterBuilder(Optional.of(TimeZone.getTimeZone("GMT-0400"))); PersonIdent ident = newIdent("Mon Jan 2 15:04:05 2006", "-0700"); - assertEquals("2006-01-02 18:04:05", dfb.create(ISO).format(ident)); + DateFormatter df = new DateFormatter(Optional.of(getTimeZone("GMT-0400")), ISO); + assertEquals("2006-01-02 18:04:05", df.format(ident)); } private PersonIdent newIdent(String whenStr, String tzStr) throws ParseException { whenStr += " " + tzStr; Date when = GitDateParser.parse(whenStr, null); - TimeZone tz = TimeZone.getTimeZone("GMT" + tzStr); + TimeZone tz = getTimeZone("GMT" + tzStr); PersonIdent ident = new PersonIdent("A User", "[email protected]", when, tz); // PersonIdent.toString() uses its own format with "d" instead of "dd", // hence the mismatches in 2 vs. 02 above. Nonetheless I think this sanity
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/RepositoryIndexServletTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/RepositoryIndexServletTest.java index dff8f57..f239b82 100644 --- a/gitiles-servlet/src/test/java/com/google/gitiles/RepositoryIndexServletTest.java +++ b/gitiles-servlet/src/test/java/com/google/gitiles/RepositoryIndexServletTest.java
@@ -16,7 +16,6 @@ import static com.google.gitiles.TestGitilesUrls.URLS; -import com.google.common.base.Optional; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; @@ -29,7 +28,6 @@ import java.io.IOException; import java.util.Map; -import java.util.TimeZone; import javax.servlet.http.HttpServletRequest; @@ -45,7 +43,6 @@ servlet = new RepositoryIndexServlet( new TestGitilesAccess(repo.getRepository()), new DefaultRenderer(), - new DateFormatterBuilder(Optional.<TimeZone> absent()), new TimeCache()); }