[yocto] [PATCH] [eclipse-poky][master]Add more comprehensive error message for invalid project name
Timo Müller
mail at timomueller.eu
Thu Mar 14 03:36:28 PDT 2013
Hi Ioana,
Timo Müller wrote, On 14.03.2013 11:29:
> Hi Ioana,
>
> Ioana Grigoropol wrote, On 14.03.2013 10:06:
>> [Yocto #4008]
>>
>> Signed-off-by: Ioana Grigoropol <ioanax.grigoropol at intel.com>
>> ---
>> .../sdk/ide/wizard/NewYoctoCProjectTemplate.java | 34
>> +++++++++++++++++---
>> 1 file changed, 29 insertions(+), 5 deletions(-)
>>
>> diff --git
>> a/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/wizard/NewYoctoCProjectTemplate.java
>> b/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/wizard/NewYoctoCProjectTemplate.java
>>
>> index 5ffd6b7..8ab5972 100644
>> ---
>> a/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/wizard/NewYoctoCProjectTemplate.java
>>
>> +++
>> b/plugins/org.yocto.sdk.ide/src/org/yocto/sdk/ide/wizard/NewYoctoCProjectTemplate.java
>>
>> @@ -10,6 +10,8 @@
>>
>> *******************************************************************************/
>>
>> package org.yocto.sdk.ide.wizard;
>>
>> +import java.util.ArrayList;
>> +import java.util.Arrays;
>> import java.util.LinkedHashMap;
>> import java.util.List;
>>
>> @@ -46,11 +48,11 @@ import org.yocto.sdk.ide.YoctoProfileElement;
>> import org.yocto.sdk.ide.YoctoSDKChecker;
>> import org.yocto.sdk.ide.YoctoSDKChecker.SDKCheckRequestFrom;
>> import org.yocto.sdk.ide.YoctoSDKChecker.SDKCheckResults;
>> +import org.yocto.sdk.ide.YoctoSDKPlugin;
>> +import org.yocto.sdk.ide.YoctoUIElement;
>> import org.yocto.sdk.ide.natures.YoctoSDKEmptyProjectNature;
>> import org.yocto.sdk.ide.natures.YoctoSDKProjectNature;
>> import org.yocto.sdk.ide.utils.YoctoSDKUtils;
>> -import org.yocto.sdk.ide.YoctoSDKPlugin;
>> -import org.yocto.sdk.ide.YoctoUIElement;
>>
>>
>> @SuppressWarnings("restriction")
>> @@ -58,11 +60,20 @@ public class NewYoctoCProjectTemplate extends
>> ProcessRunner {
>> protected boolean savedAutoBuildingValue;
>> protected ProjectCreatedActions pca;
>> protected IManagedBuildInfo info;
>> + protected List<Character> illegalChars = Arrays.asList('$',
>> '"','#','%','&','\'','(',')','*', '+',
>> ',','.','/',':',';','<','=','>','?','@','[','\\',']','^','`','{','|','}','~');
>>
>>
>> public NewYoctoCProjectTemplate() {
>> pca = new ProjectCreatedActions();
>> }
>> -
>> + private String printIllegalChars(){
>> + String print = "";
>> + for (int i = 0; i < illegalChars.size(); i++) {
>> + print += illegalChars.get(i);
>> + if (i != illegalChars.size() - 1)
>> + print += " ,";
>> + }
>> + return print;
>> + }
>
> I think the contained "if" isn't really necessary. You can remove the
> last ", " afterwards. Then you can also use a for each loop to append
> the characters.
>
> private String printIllegalChars(){
> String print = "";
>
> for (Character character : illegalChars) {
> print += character + ", ";
> }
>
> if (!illegalChars.isEmpty()) {
> print = print.substring(0, print.lastIndexOf(",") - 1);
> }
>
> return print;
> }
>
>> public void process(TemplateCore template, ProcessArgument[]
>> args, String processId, IProgressMonitor monitor) throws
>> ProcessFailureException {
>>
>> String projectName = args[0].getSimpleValue();
>> @@ -74,9 +85,10 @@ public class NewYoctoCProjectTemplate extends
>> ProcessRunner {
>> boolean isEmptryProject =
>> Boolean.valueOf(isEmptyProjetValue).booleanValue();
>> IProject project =
>> ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
>> try {
>> - if (projectName.contains(" ")) {
>> + if (!isValidProjectName(projectName)) {
>> project.delete(true, null);
>> - throw new ProcessFailureException(projectName + "
>> contains space(s). Project name can't contain space(s)");
>> + throw new ProcessFailureException("Project name " +
>> "\""+ projectName +"\"" +" is invalid! " +
>> + "\nNone of these characters are accepted
>> inside project names: whitespaces, " + printIllegalChars());
>
> Would be nice if we can wrap this up with the YoctoSDKMessages to be
> able to internationalize the string later.
>
>> }
>> if (!project.exists()) {
>> IWorkspace workspace = ResourcesPlugin.getWorkspace();
>> @@ -166,6 +178,18 @@ public class NewYoctoCProjectTemplate extends
>> ProcessRunner {
>> throw new
>> OperationCanceledException(Messages.getString("NewManagedProject.3") +
>> e.getMessage());
>> }
>> }
>> + private boolean isValidProjectName(String projectName) {
>> + if (projectName.contains("\\s+"))
>> + return false;
>> +
>> + char[] chars = projectName.toCharArray();
>> + if (!Character.isJavaIdentifierStart(chars[0]))
>> + return false;
>> + for (int i = 1; i < chars.length; i++)
>> + if (illegalChars.contains(chars[i]))
>> + return false;
>> + return true;
>> +}
>
> I think it would be better to use functionality from java.util.regex to
> do the name checking. The Pattern could be compiled once as a static
> member and we could than use the matcher to check whether the project
> name is fine.
>
> Something like this:
>
> private static Pattern pattern = Pattern.compile(".*(\\$|\").*");
>
> private boolean isValidProjectName(String projectName) {
> Matcher matcher = pattern.matcher(projectName);
>
> if (matcher.matches()) {
> return false;
> }
>
> return true;
> }
>
>>
>> protected final void turnOffAutoBuild(IWorkspace workspace)
>> throws CoreException {
>> IWorkspaceDescription workspaceDesc =
>> workspace.getDescription();
>>
>
> Best regards,
> Timo
I forgot to mention. I found a way to create projects with invalid names.
# Create a new Yocto C Project
# Enter a wrong name eg. Test"
# Press next
# Press finish
# --> Error Message is shown, press ok
# Press back
# Change the name to an also invalid name eg. Test$
# Click finish
Best regards,
Timo
More information about the yocto
mailing list