This repository has been archived by the owner on Nov 9, 2017. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 11
/
AbstractPushStrategy.java
134 lines (114 loc) · 4.56 KB
/
AbstractPushStrategy.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/*
* Copyright 2011, 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.client.commands.push;
import java.io.File;
import java.io.IOException;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import org.zanata.client.commands.push.PushCommand.TranslationResourcesVisitor;
import org.zanata.client.config.LocaleMapping;
import org.zanata.common.LocaleId;
import org.zanata.rest.StringSet;
import org.zanata.rest.dto.resource.Resource;
/**
* NB: you must initialise this object with init() after setPushOptions()
* @author Alex Eng <a href="mailto:aeng@redhat.com">aeng@redhat.com</a>
*
**/
public abstract class AbstractPushStrategy extends AbstractCommonPushStrategy<PushOptions>
{
private StringSet extensions;
private String fileExtension;
public abstract Set<String> findDocNames(File srcDir, List<String> includes, List<String> excludes, boolean useDefaultExclude, boolean caseSensitive, boolean excludeLocaleFilenames) throws IOException;
public abstract Resource loadSrcDoc(File sourceDir, String docName) throws IOException;
public abstract void visitTranslationResources(String docName, Resource srcDoc, TranslationResourcesVisitor visitor) throws IOException;
public AbstractPushStrategy(StringSet extensions, String fileExtension)
{
this.extensions = extensions;
this.fileExtension = fileExtension;
}
/**
* Indicates if this strategy must work without access to source files. No
* attempt should be made to read, write or push source documents for a
* trans-only strategy.
*
* @return true if this strategy only allows interactions with translation files.
*/
public boolean isTransOnly()
{
return false;
}
/**
* Scan srcDir to return a list of all source files.
*
* @param srcDir base directory in which to find source files
* @param includes empty to find all source files, non-empty to find only the
* documents in this list
* @param excludes
* @param excludeLocaleFilenames adds entries to excludes to ignore any file
* with a locale id suffix before the file extension.
* @param useDefaultExclude true to also exclude a set of default excludes
* for common temp file and source control filenames
* @param isCaseSensitive case sensitive search for includes and excludes
* options
* @return document paths for source files found in srcDir
*/
public String[] getSrcFiles(File srcDir, List<String> includes, List<String> excludes, boolean excludeLocaleFilenames, boolean useDefaultExclude, boolean isCaseSensitive)
{
if (excludeLocaleFilenames)
{
addExcludesForLocaleFilenames(excludes);
}
return getSrcFiles(srcDir, includes, excludes, Collections.<String> singletonList(fileExtension), useDefaultExclude, isCaseSensitive);
}
private void addExcludesForLocaleFilenames(List<String> excludes)
{
String sourceLang = new LocaleId(getOpts().getSourceLang()).toJavaName();
for (LocaleMapping locMap : getOpts().getLocaleMapList())
{
String loc = locMap.getJavaLocale();
if (!sourceLang.equals(loc))
{
excludes.add("**/*_" + loc + fileExtension);
}
}
}
protected String docNameToFilename(String docName)
{
return docName + fileExtension;
}
protected String docNameToFilename(String docName, LocaleMapping locale)
{
return docName + "_" + locale.getJavaLocale() + fileExtension;
}
public StringSet getExtensions()
{
return extensions;
}
public String getFileExtension()
{
return fileExtension;
}
public void init()
{
}
}