sysmodelmgr/com.symbian.smt.gui/src/com/symbian/smt/gui/ResourceFileValidator.java
changeset 0 522a326673b6
--- /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<ResourcesEnums, String> resourceSchemaFilesMap = new HashMap<ResourcesEnums, String>();
+
+	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;
+	}
+}