Package org.zanata.service.impl

Source Code of org.zanata.service.impl.TranslationMergeAuto

package org.zanata.service.impl;

import java.util.List;
import java.util.Set;

import org.zanata.common.ContentState;
import org.zanata.dao.TextFlowTargetHistoryDAO;
import org.zanata.model.HTextFlowTarget;
import org.zanata.rest.dto.resource.TextFlowTarget;
import org.zanata.service.TranslationMergeService;
import org.zanata.transformer.TargetTransformer;

/**
* @author Patrick Huang <a
*         href="mailto:pahuang@redhat.com">pahuang@redhat.com</a>
*/
class TranslationMergeAuto implements TranslationMergeService {
    private final TextFlowTargetHistoryDAO textFlowTargetHistoryDAO;

    TranslationMergeAuto(TextFlowTargetHistoryDAO textFlowTargetHistoryDAO) {
        this.textFlowTargetHistoryDAO = textFlowTargetHistoryDAO;
    }

    @Override
    public boolean merge(TextFlowTarget incomingTarget,
            HTextFlowTarget hTarget, Set<String> extensions) {
        TargetTransformer targetTransformer = new TargetTransformer(extensions);
        if (incomingTarget.getState().isUntranslated()) {
            return false;
        }

        if (hTarget.getState() == ContentState.New) {
            return serverIsUntranslated(incomingTarget, hTarget,
                    targetTransformer);
        } else if (incomingTarget.getState().isTranslated()) {
            return clientIsTranslated(incomingTarget, hTarget,
                    targetTransformer);
        } else if (incomingTarget.getState().isRejectedOrFuzzy()) {
            return clientIsFuzzyOrRejected(incomingTarget, hTarget,
                    targetTransformer);
        }

        throw new RuntimeException("unexpected content state"
                + incomingTarget.getState());
    }

    private boolean clientIsFuzzyOrRejected(TextFlowTarget incomingTarget,
            HTextFlowTarget hTarget, TargetTransformer targetTransformer) {
        boolean targetChanged = false;
        if (incomingTarget.getState() == ContentState.NeedReview
                && hTarget.getState() == ContentState.NeedReview) {
            List<String> incomingContents = incomingTarget.getContents();
            boolean contentInHistory =
                    incomingContents.equals(hTarget.getContents())
                            || textFlowTargetHistoryDAO.findContentInHistory(
                                    hTarget, incomingContents);
            if (!contentInHistory) {
                targetChanged |=
                        targetTransformer.transform(incomingTarget, hTarget);
            }
        }
        return targetChanged;
    }

    private boolean clientIsTranslated(TextFlowTarget incomingTarget,
            HTextFlowTarget hTarget, TargetTransformer targetTransformer) {
        boolean targetChanged = false;
        List<String> incomingContents = incomingTarget.getContents();
        boolean contentInHistory =
                incomingContents.equals(hTarget.getContents())
                        || textFlowTargetHistoryDAO.findContentInHistory(
                                hTarget, incomingContents);
        if (!contentInHistory) {
            // content has changed
            targetChanged |=
                    targetTransformer.transform(incomingTarget, hTarget);
            hTarget.setState(ContentState.Translated);
        }
        return targetChanged;
    }

    private boolean serverIsUntranslated(TextFlowTarget incomingTarget,
            HTextFlowTarget hTarget, TargetTransformer targetTransformer) {
        boolean targetChanged = false;
        targetChanged |= targetTransformer.transform(incomingTarget, hTarget);
        if (incomingTarget.getState() == ContentState.Approved) {
            hTarget.setState(ContentState.Translated);
        }
        return targetChanged;
    }

}
TOP

Related Classes of org.zanata.service.impl.TranslationMergeAuto

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.