Skip to content
This repository has been archived by the owner on Nov 9, 2017. It is now read-only.

Commit

Permalink
work in progress - getting TextFlowDAO to work
Browse files Browse the repository at this point in the history
  • Loading branch information
Patrick Huang committed May 21, 2012
1 parent 2a13e73 commit 26d97e1
Show file tree
Hide file tree
Showing 10 changed files with 64 additions and 16 deletions.
10 changes: 5 additions & 5 deletions zanata-war/src/main/java/org/zanata/dao/TextFlowDAO.java
Expand Up @@ -56,9 +56,12 @@
import org.zanata.webtrans.shared.model.TransMemoryQuery;
import org.zanata.webtrans.shared.rpc.HasSearchType.SearchType;

import lombok.extern.slf4j.Slf4j;

@Name("textFlowDAO")
@AutoCreate
@Scope(ScopeType.STATELESS)
@Slf4j
public class TextFlowDAO extends AbstractDAOImpl<HTextFlow, Long>
{
private static final Version LUCENE_VERSION = Version.LUCENE_29;
Expand All @@ -69,9 +72,6 @@ public class TextFlowDAO extends AbstractDAOImpl<HTextFlow, Long>
@In
LocaleDAO localeDAO;

@Logger
Log log;

public TextFlowDAO()
{
super(HTextFlow.class);
Expand Down Expand Up @@ -173,7 +173,7 @@ public List<Object[]> getSearchResult(TransMemoryQuery query, List<Long> transla
int queriesSize = multiQueryText.length;
if (queriesSize > IndexFieldLabels.CONTENT_FIELDS_CASE_FOLDED.length)
{
log.warn("query contains {0} fields, but we only index {1}", queriesSize, IndexFieldLabels.CONTENT_FIELDS_CASE_FOLDED.length);
log.warn("query contains {} fields, but we only index {}", queriesSize, IndexFieldLabels.CONTENT_FIELDS_CASE_FOLDED.length);
}
String[] searchFields = new String[queriesSize];
System.arraycopy(IndexFieldLabels.CONTENT_FIELDS_CASE_FOLDED, 0, searchFields, 0, queriesSize);
Expand Down Expand Up @@ -281,7 +281,7 @@ public int compare(Long arg0, Long arg1)

public List<HTextFlow> getAllUntranslatedTextFlowByDocId(Long documentId, HLocale hLocale)
{
String query = "from HTextFlow tf where tf.obsolete = 0 and tf.document.id = :docId and not exists elements(tf.targets[:locale])";
String query = "from HTextFlow tf where tf.obsolete = 0 and tf.document.id = :docId and :locale not in indices(tf.targets) ";
Query textFlowQuery = getSession().createQuery(query);
textFlowQuery.setParameter("docId", documentId);
textFlowQuery.setParameter("locale", hLocale);
Expand Down
Expand Up @@ -23,10 +23,15 @@
import java.util.List;
import java.util.Set;

import javax.annotation.Nonnull;

import org.zanata.common.ContentState;
import org.zanata.common.LocaleId;
import org.zanata.common.MergeType;
import org.zanata.exception.ConcurrentTranslationException;
import org.zanata.exception.ZanataServiceException;
import org.zanata.model.HLocale;
import org.zanata.model.HTextFlow;
import org.zanata.model.HTextFlowTarget;
import org.zanata.rest.dto.resource.TranslationsResource;
import org.zanata.webtrans.shared.model.TransUnitUpdateInfo;
Expand Down Expand Up @@ -91,6 +96,19 @@ public interface TranslationService
List<String> translateAllInDoc(String projectSlug, String iterationSlug, String docId, LocaleId locale, TranslationsResource translations, Set<String> extensions,
MergeType mergeType);

/**
* Translate a single text flow.
* It will check whether the text flow can be translated for given locale.
* Then it will try to get or create text flow target and save the contents and state to it.
*
* @param hTextFlow the text flow to be translated
* @param hLocale The locale that the translations belong to
* @param contentsToSave translations
* @param state content state
* @return translated text flow target.
*/
HTextFlowTarget translate(@Nonnull HTextFlow hTextFlow, @Nonnull HLocale hLocale, @Nonnull List<String> contentsToSave, ContentState state);

public interface TranslationResult
{
boolean isTranslationSuccessful();
Expand Down
Expand Up @@ -218,6 +218,16 @@ private HTextFlowTarget getOrCreateTarget(HTextFlow hTextFlow, HLocale hLocale)
return hTextFlowTarget;
}

@Override
public HTextFlowTarget translate(@Nonnull HTextFlow hTextFlow, @Nonnull HLocale hLocale, @Nonnull List<String> contentsToSave, ContentState state)
{
validateLocale(hLocale.getLocaleId(), hTextFlow);
int nPlurals = getNumPlurals(hLocale, hTextFlow);
HTextFlowTarget hTextFlowTarget = getOrCreateTarget(hTextFlow, hLocale);
translate(hTextFlowTarget, contentsToSave, state, nPlurals);
return hTextFlowTarget;
}

private HTextFlowTarget translate(@Nonnull HTextFlowTarget hTextFlowTarget, @Nonnull List<String> contentsToSave, ContentState requestedState, int nPlurals)
{
boolean targetChanged = false;
Expand Down
Expand Up @@ -484,7 +484,7 @@ else if (nextChar == '!')
sb.append(nextChar);
}
}
Log.info("Decoded: \"" + toDecode + "\" to \"" + sb + "\"");
Log.debug("Decoded: \"" + toDecode + "\" to \"" + sb + "\"");
return sb.toString();
}

Expand Down
Expand Up @@ -21,14 +21,11 @@
package org.zanata.webtrans.client.presenter;

import org.zanata.webtrans.client.events.NotificationEvent;
import org.zanata.webtrans.client.history.History;
import org.zanata.webtrans.client.history.HistoryToken;
import org.zanata.webtrans.client.rpc.CachingDispatchAsync;
import org.zanata.webtrans.client.ui.PrefillPopupPanelDisplay;
import org.zanata.webtrans.shared.model.DocumentId;
import org.zanata.webtrans.shared.rpc.NoOpResult;
import org.zanata.webtrans.shared.rpc.PrefillTranslation;

import com.google.common.base.Preconditions;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.inject.Inject;
Expand Down
Expand Up @@ -65,7 +65,7 @@
public class PrefillTranslationHandler extends AbstractActionHandler<PrefillTranslation, NoOpResult>
{

@In("webtrans.gwt.GetTransMemoryHandler")
@In(value = "webtrans.gwt.GetTransMemoryHandler", create = true)
private GetTransMemoryHandler getTransMemoryHandler;

@In
Expand Down
Expand Up @@ -27,4 +27,5 @@
*/
public class NoOpResult implements Result
{
private static final long serialVersionUID = 1L;
}
Expand Up @@ -31,7 +31,8 @@
*/
public class PrefillTranslation extends AbstractWorkspaceAction<NoOpResult>
{
private final int approvedThreshold;
private static final long serialVersionUID = 1L;
private int approvedThreshold;
private DocumentId docId;

public PrefillTranslation(int approvedThreshold, DocumentId docId)
Expand All @@ -40,6 +41,11 @@ public PrefillTranslation(int approvedThreshold, DocumentId docId)
this.docId = docId;
}

@SuppressWarnings("unused")
PrefillTranslation()
{
}

public int getApprovedThreshold()
{
return approvedThreshold;
Expand Down
Expand Up @@ -5,9 +5,4 @@
public class TransUnitEditResult implements Result
{
private static final long serialVersionUID = -950617414456103445L;

@SuppressWarnings("unused")
public TransUnitEditResult()
{
}
}
21 changes: 21 additions & 0 deletions zanata-war/src/test/java/org/zanata/dao/TextFlowDAOTest.java
Expand Up @@ -11,8 +11,13 @@
import org.testng.annotations.Test;
import org.zanata.ZanataDbunitJpaTest;
import org.zanata.common.LocaleId;
import org.zanata.model.HLocale;
import org.zanata.model.HTextFlow;

import lombok.extern.slf4j.Slf4j;

@Test(groups = { "jpa-tests" })
@Slf4j
public class TextFlowDAOTest extends ZanataDbunitJpaTest
{

Expand All @@ -21,6 +26,7 @@ public class TextFlowDAOTest extends ZanataDbunitJpaTest
@Override
protected void prepareDBUnitOperations()
{
beforeTestOperations.add(new DataSetOperation("org/zanata/test/model/ProjectsData.dbunit.xml", DatabaseOperation.CLEAN_INSERT));
beforeTestOperations.add(new DataSetOperation("org/zanata/test/model/TextFlowTestData.dbunit.xml", DatabaseOperation.CLEAN_INSERT));
beforeTestOperations.add(new DataSetOperation("org/zanata/test/model/LocalesData.dbunit.xml", DatabaseOperation.CLEAN_INSERT));
}
Expand Down Expand Up @@ -48,4 +54,19 @@ public void getIdsWithTranslations()
assertThat(fr.size(), is(0));
}

@Test
public void canGetAllUntranslatedTextFlowForADocument() {
HLocale deLocale = getEm().find(HLocale.class, 3L);
log.info("locale: {}", deLocale);
List<HTextFlow> all = dao.getTransUnitList(1L);
log.info("all text flow: {}", all);

List<HTextFlow> result = dao.getAllUntranslatedTextFlowByDocId(1L, deLocale);
assertThat(result.size(), is(0));

HLocale frLocale = getEm().find(HLocale.class, 6L);
result = dao.getAllUntranslatedTextFlowByDocId(1L, frLocale);
assertThat(result.size(), is(1));
}

}

0 comments on commit 26d97e1

Please sign in to comment.