/*
* Copyright 2014 Red Hat, Inc. and/or its affiliates.
*
* 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.dashbuilder.displayer.client;
import java.util.Map;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import org.dashbuilder.common.client.StringUtils;
import org.dashbuilder.dataset.DataSet;
import org.dashbuilder.dataset.DataSetLookup;
import org.dashbuilder.dataset.client.ClientDataSetManager;
import org.dashbuilder.dataset.client.DataSetClientServices;
import org.dashbuilder.displayer.DisplayerSettings;
import org.dashbuilder.displayer.client.formatter.ValueFormatter;
import org.dashbuilder.displayer.client.formatter.ValueFormatterRegistry;
import org.dashbuilder.displayer.client.resources.i18n.CommonConstants;
/**
* The locator service for Displayer implementations.
*/
@ApplicationScoped
public class DisplayerLocator {
private DataSetClientServices clientServices;
private ClientDataSetManager clientDataSetManager;
private ValueFormatterRegistry formatterRegistry;
private RendererManager rendererManager;
public DisplayerLocator() {
}
@Inject
public DisplayerLocator(DataSetClientServices clientServices,
ClientDataSetManager clientDataSetManager,
RendererManager rendererManager,
ValueFormatterRegistry formatterRegistry) {
this.clientServices = clientServices;
this.clientDataSetManager = clientDataSetManager;
this.rendererManager = rendererManager;
this.formatterRegistry = formatterRegistry;
}
/**
* Get the displayer component for the specified data displayer (with no data set attached).
*/
public Displayer lookupDisplayer(DisplayerSettings target) {
RendererLibrary renderer = rendererManager.getRendererForDisplayer(target);
Displayer displayer = renderer.lookupDisplayer(target);
if (displayer == null) {
String rendererUuid = target.getRenderer();
if (StringUtils.isBlank(rendererUuid)) throw new RuntimeException(CommonConstants.INSTANCE.displayerlocator_default_renderer_undeclared(target.getType().toString()));
throw new RuntimeException(CommonConstants.INSTANCE.displayerlocator_unsupported_displayer_renderer(target.getType().toString(), rendererUuid));
}
displayer.setDisplayerSettings(target);
// Check if a DataSet has been set instead of a DataSetLookup.
DataSetLookup dataSetLookup = target.getDataSetLookup();
if (target.getDataSet() != null) {
DataSet dataSet = target.getDataSet();
clientDataSetManager.registerDataSet(dataSet);
dataSetLookup = new DataSetLookup(dataSet.getUUID());
}
DataSetHandler handler = new DataSetHandlerImpl(clientServices, dataSetLookup);
displayer.setDataSetHandler(handler);
setValueFormatters(displayer);
return displayer;
}
protected void setValueFormatters(Displayer displayer) {
Map<String,ValueFormatter> m = formatterRegistry.get(displayer.getDisplayerSettings().getUUID());
for (String columnId : m.keySet()) {
displayer.addFormatter(columnId, m.get(columnId));
}
}
}