diff --git a/zanata-model/src/main/java/org/zanata/hibernate/search/DateBridge.java b/zanata-model/src/main/java/org/zanata/hibernate/search/DateBridge.java deleted file mode 100644 index feb9977923..0000000000 --- a/zanata-model/src/main/java/org/zanata/hibernate/search/DateBridge.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright 2014, Red Hat, Inc. and individual contributors as indicated by the - * @author tags. See the copyright.txt file in the distribution for a full - * listing of individual contributors. - * - * This is free software; you can redistribute it and/or modify it under the - * terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1 of the License, or (at your option) - * any later version. - * - * This software is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this software; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA, or see the FSF - * site: http://www.fsf.org. - */ -package org.zanata.hibernate.search; - -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Date; - -import org.hibernate.search.bridge.TwoWayStringBridge; -import org.zanata.common.ContentState; - -public class DateBridge implements TwoWayStringBridge { - - private final static String DATE_FORMAT = "yyyy-MM-dd hh:mm:ss"; - - private final SimpleDateFormat dateFormat = new SimpleDateFormat( - DATE_FORMAT); - - @Override - public String objectToString(Object value) { - if (value instanceof Date) { - Date date = (Date) value; - return dateFormat.format(date); - } else { - throw new IllegalArgumentException( - "DateBridge used on a non-Date type: " + value.getClass()); - } - } - - @Override - public Object stringToObject(String date) { - try { - return dateFormat.parse(date); - } catch (ParseException e) { - throw new IllegalArgumentException( - "DateBridge used on invalid date format: " + date); - } - } - -} diff --git a/zanata-model/src/main/java/org/zanata/hibernate/search/IndexFieldLabels.java b/zanata-model/src/main/java/org/zanata/hibernate/search/IndexFieldLabels.java index 42ac62c0be..dd46dadb46 100644 --- a/zanata-model/src/main/java/org/zanata/hibernate/search/IndexFieldLabels.java +++ b/zanata-model/src/main/java/org/zanata/hibernate/search/IndexFieldLabels.java @@ -17,7 +17,6 @@ public interface IndexFieldLabels { public static final String DOCUMENT_ID_FIELD = "documentId"; public static final String LOCALE_ID_FIELD = "locale"; public static final String CONTENT_STATE_FIELD = "state"; - public static final String LAST_CHANGED_FIELD = "lastChanged"; public static final String TF_CONTENT = "textFlow.content-nocase"; public static final String CONTENT = "content-nocase"; diff --git a/zanata-model/src/main/java/org/zanata/model/HTextFlowTarget.java b/zanata-model/src/main/java/org/zanata/model/HTextFlowTarget.java index 5cd9061c39..ad8322dad6 100644 --- a/zanata-model/src/main/java/org/zanata/model/HTextFlowTarget.java +++ b/zanata-model/src/main/java/org/zanata/model/HTextFlowTarget.java @@ -23,13 +23,11 @@ import java.io.Serializable; import java.util.ArrayList; import java.util.Arrays; -import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.annotation.Nonnull; -import javax.persistence.AttributeOverride; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; @@ -44,8 +42,6 @@ import javax.persistence.PostPersist; import javax.persistence.PostUpdate; import javax.persistence.PreUpdate; -import javax.persistence.Temporal; -import javax.persistence.TemporalType; import javax.persistence.Transient; import javax.validation.constraints.NotNull; @@ -55,7 +51,6 @@ import org.hibernate.annotations.Cache; import org.hibernate.annotations.CacheConcurrencyStrategy; -import org.hibernate.annotations.Cascade; import org.hibernate.annotations.NaturalId; import org.hibernate.search.annotations.Analyze; import org.hibernate.search.annotations.AnalyzerDiscriminator; @@ -69,7 +64,6 @@ import org.zanata.common.HasContents; import org.zanata.common.LocaleId; import org.zanata.hibernate.search.ContentStateBridge; -import org.zanata.hibernate.search.DateBridge; import org.zanata.hibernate.search.IndexFieldLabels; import org.zanata.hibernate.search.LocaleIdBridge; import org.zanata.hibernate.search.StringListBridge; diff --git a/zanata-model/src/main/java/org/zanata/model/ModelEntityBase.java b/zanata-model/src/main/java/org/zanata/model/ModelEntityBase.java index 6f47cd7566..08a58d7042 100644 --- a/zanata-model/src/main/java/org/zanata/model/ModelEntityBase.java +++ b/zanata-model/src/main/java/org/zanata/model/ModelEntityBase.java @@ -24,7 +24,6 @@ import java.io.IOException; import java.io.Serializable; import java.util.Date; - import javax.persistence.Column; import javax.persistence.EntityListeners; import javax.persistence.GeneratedValue; @@ -38,14 +37,9 @@ import javax.persistence.TemporalType; import javax.persistence.Version; -import com.google.common.annotations.VisibleForTesting; - -import org.hibernate.search.annotations.Analyze; -import org.hibernate.search.annotations.Field; -import org.hibernate.search.annotations.FieldBridge; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.zanata.hibernate.search.DateBridge; +import com.google.common.annotations.VisibleForTesting; @EntityListeners({ModelEntityBase.EntityListener.class}) @MappedSuperclass @@ -93,8 +87,6 @@ public void setCreationDate(Date creationDate) { // NB: also used in HSimpleComment @Temporal(TemporalType.TIMESTAMP) @Column(nullable = false) - @Field(analyze = Analyze.NO) - @FieldBridge(impl = DateBridge.class) public Date getLastChanged() { return lastChanged; } diff --git a/zanata-war/src/main/java/org/zanata/service/impl/TranslationMemoryServiceImpl.java b/zanata-war/src/main/java/org/zanata/service/impl/TranslationMemoryServiceImpl.java index 85a145e6ee..efb4e2853e 100644 --- a/zanata-war/src/main/java/org/zanata/service/impl/TranslationMemoryServiceImpl.java +++ b/zanata-war/src/main/java/org/zanata/service/impl/TranslationMemoryServiceImpl.java @@ -39,8 +39,6 @@ import org.apache.lucene.search.BooleanClause; import org.apache.lucene.search.BooleanQuery; import org.apache.lucene.search.Query; -import org.apache.lucene.search.Sort; -import org.apache.lucene.search.SortField; import org.apache.lucene.search.TermQuery; import org.apache.lucene.search.WildcardQuery; import org.apache.lucene.util.Version; @@ -90,8 +88,6 @@ public class TranslationMemoryServiceImpl implements TranslationMemoryService { private static final Version LUCENE_VERSION = Version.LUCENE_29; - private boolean USE_LUCENE_SORT = true; - @Override public TransMemoryDetails getTransMemoryDetail(HLocale hLocale, HTextFlow tf) { @@ -139,21 +135,19 @@ public Optional searchBestMatchTransMemory( findMatchingTranslation(targetLocaleId, sourceLocaleId, query, null, HTextFlowTarget.class); + System.out.println("after filter:" + matches.size()); + if (matches.isEmpty()) { return Optional. absent(); } - if (!USE_LUCENE_SORT) { - Collections.sort(matches, new Comparator() { - @Override - public int compare(Object[] o1, Object[] o2) { - HTextFlowTarget target1 = (HTextFlowTarget) o1[1]; - HTextFlowTarget target2 = (HTextFlowTarget) o2[1]; - return target2.getLastChanged().compareTo( - target1.getLastChanged()); - } - }); - } + Collections.sort(matches, new Comparator() { + @Override + public int compare(Object[] o1, Object[] o2) { + return ((HTextFlowTarget) o2[1]).getLastChanged().compareTo( + ((HTextFlowTarget) o1[1]).getLastChanged()); + } + }); return Optional.of((HTextFlowTarget) matches.get(0)[1]); } @@ -258,6 +252,9 @@ private TransMemoryQuery buildTMQuery(HTextFlow textFlow, * @param maxResults * @return */ + private final ValidTargetFilterPredicate predicate = + new ValidTargetFilterPredicate(); + private List findMatchingTranslation(LocaleId targetLocaleId, LocaleId sourceLocaleId, TransMemoryQuery transMemoryQuery, Integer maxResults, Class... entities) { @@ -266,9 +263,9 @@ private List findMatchingTranslation(LocaleId targetLocaleId, getSearchResult(transMemoryQuery, sourceLocaleId, targetLocaleId, maxResults, entities); + System.out.println("before filter:" + matches.size()); // filter out invalid target - return Lists.newArrayList(Collections2.filter(matches, - new ValidTargetFilterPredicate())); + return Lists.newArrayList(Collections2.filter(matches, predicate)); } catch (ParseException e) { if (transMemoryQuery.getSearchType() == HasSearchType.SearchType.RAW) { @@ -534,22 +531,12 @@ private List getSearchResult(TransMemoryQuery query, FullTextQuery ftQuery = entityManager.createFullTextQuery(textQuery, entities); - if(USE_LUCENE_SORT) { - // sort desc by lastChanged of HTextFlowTarget - ftQuery.setSort(new Sort( - new SortField(IndexFieldLabels.LAST_CHANGED_FIELD, - SortField.STRING, true))); - } - ftQuery.setProjection(FullTextQuery.SCORE, FullTextQuery.THIS); - List matches; if (maxResult != null) { - matches = ftQuery.setMaxResults(maxResult).getResultList(); - } else { - matches = ftQuery.getResultList(); + return ftQuery.setMaxResults(maxResult).getResultList(); } - return matches; + return ftQuery.getResultList(); } /** @@ -783,7 +770,7 @@ public boolean apply(TransMemoryResultItem tmResult) { } // filter out invalid targets(obsolete project or version) - private static class ValidTargetFilterPredicate implements + private static final class ValidTargetFilterPredicate implements Predicate { @Override public boolean apply(Object[] input) {