diff -r 000000000000 -r 522a326673b6 sysmodelmgr/com.symbian.smt.gui/src/com/symbian/smt/gui/ResourceFileValidator.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sysmodelmgr/com.symbian.smt.gui/src/com/symbian/smt/gui/ResourceFileValidator.java Thu Mar 11 19:08:43 2010 +0200 @@ -0,0 +1,152 @@ +// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + + + +package com.symbian.smt.gui; + +import java.io.File; +import java.util.HashMap; + +/** + * @author barbararosi-schwartz + * + */ +public class ResourceFileValidator extends XmlFileValidator { + /** + * The Map that caches all defined resource schema files, keyed by the + * ResourcesEnums enums. + */ + private static final HashMap resourceSchemaFilesMap = new HashMap(); + + static { + for (ResourcesEnums type : ResourcesEnums.values()) { + switch (type) { + case BORDER_SHAPES: + resourceSchemaFilesMap + .put(type, + "./resources/xsd/Border-shapes.xsd"); + break; + + case BORDER_STYLES: + resourceSchemaFilesMap + .put(type, + "./resources/xsd/Border-styles.xsd"); + break; + + case COLOURS: + resourceSchemaFilesMap + .put(type, + "./resources/xsd/Colours.xsd"); + break; + + case DEPENDENCIES: + // No need for schema validation + break; + + case LEVELS: + resourceSchemaFilesMap + .put(type, + "./resources/xsd/Levels.xsd"); + break; + + case LOCALISATION: + resourceSchemaFilesMap + .put(type, + "./resources/xsd/Localisation.xsd"); + break; + + case PATTERNS: + resourceSchemaFilesMap + .put(type, + "./resources/xsd/Patterns.xsd"); + break; + + case SHAPES: + // TODO:BRS: Need to get the Shapes schema right before + // validating with it. + // resourceSchemaFilesMap.put(type, + // "./../SystemModelGenerator/resources/xsd/Shapes.xsd"); + break; + + case SYSTEM_INFO: + // No need for schema validation + break; + + case S12_XML: + // No need for schema validation + break; + + default: + throw new RuntimeException("Unknown resource type [" + + type.arg() + "]"); + } + } + } + + private ResourcesEnums selectedResourceType; + + /** + * + */ + public ResourceFileValidator(ResourcesEnums selectedResourceType) { + super(); + + this.selectedResourceType = selectedResourceType; + } + + // TODO:BRS:This method is incomplete and currently unused. It is related to + // comparing 2 different border shapes and making sure elements are not repeated + // between files (the same should apply to patterns). + // The return type in the signature should also be changed to a list of border + // shape item objects. +// private void getBorderShapesItems(String filePath) { +// try { +// JAXBContext context = JAXBContext.newInstance(Values.class); +// Unmarshaller unmarshaller = context.createUnmarshaller(); +// // Values values = unmarshaller.unmarshal(File or URL); +// } catch (JAXBException e) { +// e.printStackTrace(); +// } +// +// } + + protected File getSchemaFile() { + String schemaFilePath = resourceSchemaFilesMap + .get(selectedResourceType); + File schemaFile = new File(Helper.relative2AbsolutePaths( + schemaFilePath, smgFolder, "|")); + + return schemaFile; + } + + public String validateXml(String filePath) { + String errorMessage = super.validateXml(filePath); + + if (errorMessage == null) { + if (selectedResourceType.equals(ResourcesEnums.BORDER_SHAPES) + || selectedResourceType.equals(ResourcesEnums.PATTERNS)) { + // Finally, if we have multiple files for this resource, check + // about duplicates + // TODO:BRS:This piece of code is unfinished. If it is required to check + // that there are no duplicate items across multiple files, use method + // getBorderShapesItems() above and create similar getPatternsItem() method + // errorMessage = do special validation + } + } + + return errorMessage; + } +}