+++ /dev/null
-/*
- * Copyright (C) 2007-2012 Argeo GmbH
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.argeo.slc.lib.linux.rpmfactory;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.commons.io.IOUtils;
-import org.springframework.core.io.Resource;
-
-public class RpmSpecFile {
- private Resource specFile;
-
- private String name;
- private String version;
- private String release;
- private Map<String, String> sources = new HashMap<String, String>();
- private Map<String, String> patches = new HashMap<String, String>();
-
- public RpmSpecFile(Resource specFile) {
- this.specFile = specFile;
- parseSpecFile();
- }
-
- public void init() {
- parseSpecFile();
- }
-
- @SuppressWarnings("unchecked")
- protected void parseSpecFile() {
- try {
- List<String> lines = (List<String>) IOUtils.readLines(specFile
- .getInputStream());
-
- lines: for (String line : lines) {
- int indexSemiColon = line.indexOf(':');
- if (indexSemiColon <= 0)
- continue lines;
- String directive = line.substring(0, indexSemiColon).trim();
- String value = line.substring(indexSemiColon + 1).trim();
- if ("name".equals(directive.toLowerCase()))
- name = value;
- else if ("version".equals(directive.toLowerCase()))
- version = value;
- else if ("release".equals(directive.toLowerCase()))
- release = value;
- else if (directive.toLowerCase().startsWith("source"))
- sources.put(directive, interpret(value));
- else if (directive.toLowerCase().startsWith("patch"))
- patches.put(directive, interpret(value));
- }
-
- } catch (IOException e) {
- throw new RuntimeException("Cannot parse spec file " + specFile, e);
- }
- }
-
- protected String interpret(String value) {
- StringBuffer buf = new StringBuffer(value.length());
- StringBuffer currKey = null;
- boolean mayBeKey = false;
- chars: for (char c : value.toCharArray()) {
- if (c == '%')
- mayBeKey = true;
- else if (c == '{') {
- if (mayBeKey)
- currKey = new StringBuffer();
- } else if (c == '}') {
- if (currKey == null)
- continue chars;
- String key = currKey.toString();
- if ("name".equals(key.toLowerCase()))
- buf.append(name);
- else if ("version".equals(key.toLowerCase()))
- buf.append(version);
- else
- buf.append("%{").append(key).append('}');
- currKey = null;
- } else {
- if (currKey != null)
- currKey.append(c);
- else
- buf.append(c);
- }
- }
- return buf.toString();
- }
-
- public Resource getSpecFile() {
- return specFile;
- }
-
- public String getName() {
- return name;
- }
-
- public String getVersion() {
- return version;
- }
-
- public String getRelease() {
- return release;
- }
-
- public Map<String, String> getSources() {
- return sources;
- }
-
- public Map<String, String> getPatches() {
- return patches;
- }
-
-}