/** * Copyright (c) 2014-2017 by the respective copyright holders. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ package org.eclipse.smarthome.model.sitemap.internal; import java.util.HashSet; import java.util.Set; import org.apache.commons.lang.StringUtils; import org.eclipse.smarthome.model.core.ModelRepository; import org.eclipse.smarthome.model.sitemap.Sitemap; import org.eclipse.smarthome.model.sitemap.SitemapProvider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * This class provides access to the sitemap model files. * * @author Kai Kreuzer - Initial contribution and API * */ public class SitemapProviderImpl implements SitemapProvider { protected static final String SITEMAP_FILEEXT = ".sitemap"; private final Logger logger = LoggerFactory.getLogger(SitemapProviderImpl.class); private ModelRepository modelRepo = null; public void setModelRepository(ModelRepository modelRepo) { this.modelRepo = modelRepo; } public void unsetModelRepository(ModelRepository modelRepo) { this.modelRepo = null; } /* * (non-Javadoc) * * @see org.eclipse.smarthome.model.sitemap.internal.SitemapProvider#getSitemap(java.lang.String) */ @Override public Sitemap getSitemap(String sitemapName) { if (modelRepo != null) { String filename = sitemapName + ".sitemap"; Sitemap sitemap = (Sitemap) modelRepo.getModel(filename); if (sitemap != null) { if (!sitemap.getName().equals(sitemapName)) { logger.warn( "Filename `{}` does not match the name `{}` of the sitemap - please fix this as you might see unexpected behavior otherwise.", filename, sitemap.getName()); } return sitemap; } else { logger.trace("Sitemap {} cannot be found", sitemapName); return null; } } else { logger.debug("No model repository service is available"); return null; } } @Override public Set<String> getSitemapNames() { Set<String> names = new HashSet<>(); if (modelRepo != null) { for (String name : modelRepo.getAllModelNamesOfType("sitemap")) { names.add(StringUtils.removeEnd(name, SITEMAP_FILEEXT)); } } else { logger.debug("No model repository service is available"); } return names; } }