use of org.apache.oro.text.regex.Perl5Matcher in project tdi-studio-se by Talend.
the class JSONFileStep1Form method addFieldsListeners.
/**
* Main Fields addControls.
*/
@Override
protected void addFieldsListeners() {
// fileFieldXsd : Event modifyText
// fileFieldXsd.addModifyListener(new ModifyListener() {
//
// public void modifyText(final ModifyEvent e) {
// getConnection().setXsdFilePath(fileFieldXsd.getText());
// treePopulator.populateTree(fileFieldXsd.getText(), treeNode);
// checkFieldsValue();
// }
// });
// fileFieldJSON.addSelectionListener(new SelectionListener() {
//
// public void widgetSelected(SelectionEvent event) {
// if (fileFieldJSON.getResult() == null) {
// return;
// }
// String text = fileFieldJSON.getText();
// if (isContextMode()) {
// ContextType contextType = ConnectionContextHelper.getContextTypeForContextMode(
// connectionItem.getConnection(), true);
// text = TalendQuoteUtils.removeQuotes(ConnectionContextHelper.getOriginalValue(contextType, text));
// }
// // getConnection().setJSONFilePath(PathUtils.getPortablePath(JSONXsdFilePath.getText()));
// File file = new File(text);
// if (file.exists()) {
// if (file.exists()) {
// String tempxml = JSONUtil.changeJsonToXml(text);
// JSONFileStep1Form.this.wizard.setTempJsonPath(tempxml);
// valid = treePopulator.populateTree(tempxml, treeNode);
// }
// // add for bug TDI-20432
// checkFieldsValue();
// }
//
// }
//
// public void widgetDefaultSelected(SelectionEvent e) {
//
// }
// });
readbyCombo.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
EJsonReadbyMode eJsonReadbyMode = EJsonReadbyMode.getEJsonReadbyModeByDisplayName(readbyCombo.getText());
if (eJsonReadbyMode == null) {
eJsonReadbyMode = getDefaultJsonReadbyMode();
}
String readbyMode = eJsonReadbyMode.getValue();
JSONFileStep1Form.this.wizard.setReadbyMode(readbyMode);
String jsonPath = fileFieldJSON.getText();
String text = validateJsonFilePath(jsonPath);
if (text == null || text.isEmpty()) {
return;
}
String tempxml = null;
if (EJsonReadbyMode.JSONPATH.getValue().equals(readbyMode)) {
tempxml = text;
} else {
tempxml = JSONUtil.changeJsonToXml(text);
}
JSONFileStep1Form.this.wizard.setTempJsonPath(tempxml);
switchPopulator(readbyMode, tempxml);
}
});
// fileFieldJSON : Event modifyText
fileFieldJSON.addModifyListener(new ModifyListener() {
@Override
public void modifyText(final ModifyEvent e) {
String jsonPath = fileFieldJSON.getText();
String _jsonPath = jsonPath;
if (isContextMode()) {
ContextType contextType = ConnectionContextHelper.getContextTypeForContextMode(connectionItem.getConnection(), connectionItem.getConnection().getContextName());
jsonPath = TalendQuoteUtils.removeQuotes(ConnectionContextHelper.getOriginalValue(contextType, jsonPath));
}
String text = validateJsonFilePath(jsonPath);
if (text == null || text.isEmpty()) {
return;
}
String tempxml = null;
String readbyMode = JSONFileStep1Form.this.wizard.getReadbyMode();
if (EJsonReadbyMode.JSONPATH.getValue().equals(readbyMode)) {
tempxml = text;
} else {
tempxml = JSONUtil.changeJsonToXml(text);
}
File file = new File(text);
if (!file.exists()) {
file = new File(JSONUtil.tempJSONXsdPath);
}
JSONFileStep1Form.this.wizard.setTempJsonPath(tempxml);
String limitString = commonNodesLimitation.getText();
try {
limit = Integer.valueOf(limitString);
labelLimitation.setToolTipText(MessageFormat.format(Messages.JSONLimitToolTip, limit));
} catch (Exception excpt) {
// nothing need to do
}
switchPopulator(readbyMode, tempxml);
// }
// add for bug TDI-20432
checkFieldsValue();
if (getConnection().getJSONFilePath() != null && !getConnection().getJSONFilePath().equals(text)) {
getConnection().getLoop().clear();
xsdPathChanged = true;
} else {
xsdPathChanged = false;
}
if (isContextMode()) {
jsonPath = _jsonPath;
}
if (Path.fromOSString(jsonPath).toFile().isFile()) {
getConnection().setJSONFilePath(PathUtils.getPortablePath(jsonPath));
} else {
getConnection().setJSONFilePath(jsonPath);
}
JSONWizard wizard = ((JSONWizard) getPage().getWizard());
wizard.setTreeRootNode(treeNode);
BufferedReader in = null;
try {
Charset guessedCharset = CharsetToolkit.guessEncoding(file, 4096);
String str;
in = new BufferedReader(new InputStreamReader(new FileInputStream(file), guessedCharset.displayName()));
while ((str = in.readLine()) != null) {
if (str.contains("encoding")) {
//$NON-NLS-1$
//$NON-NLS-1$
String regex = "^<\\?JSON\\s*version=\\\"[^\\\"]*\\\"\\s*encoding=\\\"([^\\\"]*)\\\"\\?>$";
Perl5Compiler compiler = new Perl5Compiler();
Perl5Matcher matcher = new Perl5Matcher();
Pattern pattern = null;
try {
pattern = compiler.compile(regex);
if (matcher.contains(str, pattern)) {
MatchResult matchResult = matcher.getMatch();
if (matchResult != null) {
encoding = matchResult.group(1);
}
}
} catch (MalformedPatternException malE) {
ExceptionHandler.process(malE);
}
}
}
} catch (Exception ex) {
String fileStr = text;
String msgError = //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
"JSON" + " \"" + fileStr.replace("\\\\", "\\") + //$NON-NLS-1$
"\"\n";
if (ex instanceof FileNotFoundException) {
msgError = msgError + "is not found";
} else if (ex instanceof EOFException) {
msgError = msgError + "have an incorrect character EOF";
} else if (ex instanceof IOException) {
msgError = msgError + "is locked by another soft";
} else {
msgError = msgError + "doesn't exist";
}
if (!isReadOnly()) {
updateStatus(IStatus.ERROR, msgError);
}
// ExceptionHandler.process(ex);
} finally {
try {
if (in != null) {
in.close();
}
} catch (Exception ex2) {
ExceptionHandler.process(ex2);
}
}
if (getConnection().getEncoding() == null || "".equals(getConnection().getEncoding())) {
//$NON-NLS-1$
getConnection().setEncoding(encoding);
if (encoding != null && !("").equals(encoding)) {
//$NON-NLS-1$
encodingCombo.setText(encoding);
} else {
//$NON-NLS-1$
encodingCombo.setText("UTF-8");
}
}
// if (tempJSONXsdPath != null && getConnection().getFileContent() != null
// && getConnection().getFileContent().length > 0 && !isModifing) {
// valid = treePopulator.populateTree(tempJSONXsdPath, treeNode);
// } else {
// valid = treePopulator.populateTree(text, treeNode);
// }
checkFieldsValue();
isModifing = true;
}
});
// Event encodingCombo
encodingCombo.addModifyListener(new ModifyListener() {
@Override
public void modifyText(final ModifyEvent e) {
getConnection().setEncoding(encodingCombo.getText());
checkFieldsValue();
}
});
}
use of org.apache.oro.text.regex.Perl5Matcher in project tdi-studio-se by Talend.
the class ColumnListController method filterColumns.
/**
*
* <p>
* You can fill the filter as the format below:
* </p>
* <l> <li>CUSTOM_COLUMNS:col1</li> <li>CUSTOM_COLUMNS:col1, col2, ...</li> <li>CUSTOM_COLUMNS:*</li> <li>
* CUSTOM_COLUMNS:REGEXP:any regular expressions</li> <li>NONE_CUSTOM_COLUMNS:col1</li> <li>
* NONE_CUSTOM_COLUMNS:col1, col2, ...</li> <li>NONE_CUSTOM_COLUMNS:*</li> <li>NONE_CUSTOM_COLUMNS:REGEXP:any
* regular expressions</li> <li>REGEXP:any regular expressions</li> <li>col1</li> <li>col1,col2, ...</li> <li>*</li>
* </l>
*
* <br>
* You can refer to {@link ColumnListControllerTest } to know how does this method work. </br> <br>
* DOC ycbai Comment method "filterColumns".
*
* @param param
* @param curColumnNameList
* @param curColumnValueList
* @param customColMap
* @return
*/
private static List<String[]> filterColumns(IElementParameter param, String[] curColumnNameList, String[] curColumnValueList, Map<String, Boolean> customColMap) {
List<String[]> updatedColumns = new ArrayList<String[]>();
String[] columnNameList = curColumnNameList;
String[] columnValueList = curColumnValueList;
String filterColumns = param.getFilter();
if (filterColumns != null) {
// Hide all filter columns.
try {
String[] tmpColumnNameList = new String[curColumnNameList.length];
System.arraycopy(curColumnNameList, 0, tmpColumnNameList, 0, tmpColumnNameList.length);
String filter = filterColumns;
boolean onlyFilterCustom = false;
if (filter.startsWith(FILTER_PREFIX_CUSTOM)) {
filter = filter.substring(FILTER_PREFIX_CUSTOM.length());
onlyFilterCustom = true;
}
boolean onlyFilterNoneCustom = false;
if (filter.startsWith(FILTER_PREFIX_NONE_CUSTOM)) {
filter = filter.substring(FILTER_PREFIX_NONE_CUSTOM.length());
onlyFilterNoneCustom = true;
}
boolean unlimited = !onlyFilterCustom && !onlyFilterNoneCustom;
boolean hasReg = false;
if (filter.startsWith(FILTER_PREFIX_REGEXP)) {
filter = filter.substring(FILTER_PREFIX_REGEXP.length());
hasReg = true;
}
boolean filterAll = false;
if (filter.equals(FILTER_ALL)) {
filterAll = true;
}
if (hasReg) {
Perl5Matcher matcher = new Perl5Matcher();
Perl5Compiler compiler = new Perl5Compiler();
Pattern pattern = compiler.compile(filter);
for (String colName : tmpColumnNameList) {
if (!matcher.matches(colName, pattern) && (onlyFilterCustom && customColMap.get(colName) || onlyFilterNoneCustom && !customColMap.get(colName) || unlimited)) {
columnNameList = (String[]) ArrayUtils.removeElement(columnNameList, colName);
columnValueList = (String[]) ArrayUtils.removeElement(columnValueList, colName);
}
}
} else {
if (filterAll) {
for (String colName : tmpColumnNameList) {
if (onlyFilterCustom && customColMap.get(colName) || onlyFilterNoneCustom && !customColMap.get(colName) || unlimited) {
columnNameList = (String[]) ArrayUtils.removeElement(columnNameList, colName);
columnValueList = (String[]) ArrayUtils.removeElement(columnValueList, colName);
}
}
} else {
String[] filterColumnsArray = filter.split(FILTER_SEPARATOR);
for (String colName : filterColumnsArray) {
if (onlyFilterCustom && customColMap.get(colName) || onlyFilterNoneCustom && !customColMap.get(colName) || unlimited) {
columnNameList = (String[]) ArrayUtils.removeElement(columnNameList, colName);
columnValueList = (String[]) ArrayUtils.removeElement(columnValueList, colName);
}
}
}
}
} catch (Exception e) {
//$NON-NLS-1$
log.warn(Messages.getString("ColumnListController.invalidRegx", param.getName()), e);
}
}
updatedColumns.add(columnNameList);
updatedColumns.add(columnValueList);
return updatedColumns;
}
use of org.apache.oro.text.regex.Perl5Matcher in project tdi-studio-se by Talend.
the class MapperComponent method hasOrRenameData.
/**
*
* DOC amaumont Comment method "hasOrRenameData".
*
* @param oldName
* @param newName can be null if <code>renameAction</code> is false
* @param renameAction true to rename in all expressions, false to get boolean if present in one of the expressions
* @return
*/
@Override
protected boolean hasOrRenameData(String oldName, String newName, boolean renameAction) {
if (oldName == null || newName == null && renameAction) {
throw new NullPointerException();
}
if (externalData != null) {
List<ExternalMapperTable> tables = new ArrayList<ExternalMapperTable>(externalData.getInputTables());
tables.addAll(externalData.getOutputTables());
if (externalData.getVarsTables() != null) {
tables.addAll(externalData.getVarsTables());
}
for (ExternalMapperTable table : tables) {
if (table.getExpressionFilter() != null) {
Pattern pattern = getRenamePattern(oldName);
if (pattern != null) {
PatternMatcher matcher = new Perl5Matcher();
((Perl5Matcher) matcher).setMultiline(true);
if (renameAction) {
Perl5Substitution substitution = getRenameSubstitution(newName);
String expression = renameDataIntoExpression(pattern, matcher, substitution, table.getExpressionFilter());
table.setExpressionFilter(expression);
} else {
if (hasDataIntoExpression(pattern, matcher, table.getExpressionFilter())) {
return true;
}
}
}
}
List<ExternalMapperTableEntry> metadataTableEntries = table.getMetadataTableEntries();
if (metadataTableEntries != null) {
// loop on all entries of current table
for (ExternalMapperTableEntry entry : metadataTableEntries) {
if (hasOrRenameEntry(entry, oldName, newName, renameAction)) {
// existed
return true;
}
}
// for (ExternalMapperTableEntry entry : metadataTableEntries) {
}
if (table.getConstraintTableEntries() != null) {
for (ExternalMapperTableEntry entry : table.getConstraintTableEntries()) {
if (hasOrRenameEntry(entry, oldName, newName, renameAction)) {
// existed
return true;
}
}
}
}
}
return false;
}
use of org.apache.oro.text.regex.Perl5Matcher in project tdi-studio-se by Talend.
the class JavaRoutineSynchronizer method renamePigudfClass.
/*
* (non-Javadoc)
*
* @see org.talend.designer.codegen.AbstractRoutineSynchronizer#renamePigudfClass(org.talend.core.model.properties.
* RoutineItem)
*/
@Override
public void renamePigudfClass(PigudfItem pigudfItem, String oldLabel) {
if (pigudfItem == null) {
return;
}
String routineContent = new String(pigudfItem.getContent().getInnerContent());
String label = pigudfItem.getProperty().getLabel();
//
Perl5Matcher matcher = new Perl5Matcher();
Perl5Compiler compiler = new Perl5Compiler();
PatternMatcherInput patternMatcherInput = new PatternMatcherInput(routineContent);
//$NON-NLS-1$//$NON-NLS-2$
String regx = "public(\\s)+class(\\s)+" + oldLabel + "(\\s)(.+)\\{";
String extendsText = "";
try {
org.apache.oro.text.regex.Pattern pattern = compiler.compile(regx);
boolean contains = matcher.contains(patternMatcherInput, pattern);
if (contains) {
org.apache.oro.text.regex.MatchResult matchResult = matcher.getMatch();
extendsText = matchResult.group(matchResult.groups() - 1);
}
//$NON-NLS-1$
String regexp = "public(\\s)+class(\\s)+\\w+(\\s)\\{";
if (extendsText != null) {
extendsText = extendsText.trim();
//$NON-NLS-1$//$NON-NLS-2$
regexp = "public(\\s)+class(\\s)+\\w+(\\s)+" + extendsText + "(\\s)*\\{";
}
// rename class name
//$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
routineContent = routineContent.replaceFirst(regexp, "public class " + label + " " + extendsText + " {");
// rename constructor
String constructorRegx = "(\\s+)" + oldLabel + "(\\((.*)\\))";
String toReplace = "$1" + label + "$1$2";
pattern = compiler.compile(constructorRegx);
Perl5Substitution substitution = new Perl5Substitution(toReplace, Perl5Substitution.INTERPOLATE_ALL);
routineContent = Util.substitute(matcher, pattern, substitution, routineContent, Util.SUBSTITUTE_ALL);
} catch (MalformedPatternException e) {
ExceptionHandler.process(new Exception("Rename pigudf failed"));
}
pigudfItem.getContent().setInnerContent(routineContent.getBytes());
}
use of org.apache.oro.text.regex.Perl5Matcher in project tdi-studio-se by Talend.
the class MapDataDelegateHelper method matchExpression.
private boolean matchExpression(String regex, String expression) {
PatternCompiler compiler = new Perl5Compiler();
try {
//$NON-NLS-1$ //$NON-NLS-2$
Pattern pattern = compiler.compile("\\b(" + UpdateContextVariablesHelper.replaceSpecialChar(regex) + ")(\\b|\\_)");
PatternMatcher matcher = new Perl5Matcher();
((Perl5Matcher) matcher).setMultiline(true);
if (matcher.contains(expression, pattern)) {
return true;
}
} catch (MalformedPatternException e) {
//
}
return false;
}
Aggregations