ViewRegistry { public void installViewInstance(ViewInstanceEntity instanceEntity) throws ValidationException, IllegalArgumentException, SystemException { ViewEntity viewEntity = getDefinition(instanceEntity.getViewName()); if (viewEntity != null) { String instanceName = instanceEntity.getName(); String viewName = viewEntity.getCommonName(); String version = viewEntity.getVersion(); if (getInstanceDefinition(viewName, version, instanceName) == null) { if (LOG.isDebugEnabled()) { LOG.debug("Creating view instance " + viewName + "/" + version + "/" + instanceName); } instanceEntity.validate(viewEntity, Validator.ValidationContext.PRE_CREATE); setPersistenceEntities(instanceEntity); ViewInstanceEntity persistedInstance = mergeViewInstance(instanceEntity, viewEntity.getResourceType()); instanceEntity.setViewInstanceId(persistedInstance.getViewInstanceId()); syncViewInstance(instanceEntity, persistedInstance); try { bindViewInstance(viewEntity, instanceEntity); } catch (Exception e) { String message = "Caught exception installing view instance."; LOG.error(message, e); throw new IllegalStateException(message, e); } addInstanceDefinition(viewEntity, instanceEntity); handlerList.addViewInstance(instanceEntity); } } else { String message = "Attempt to install an instance for an unknown view " + instanceEntity.getViewName() + "."; LOG.error(message); throw new IllegalArgumentException(message); } } @Inject  ViewRegistry(AmbariEventPublisher publisher); static void main(String[] args); Collection<ViewEntity> getDefinitions(); ViewEntity getDefinition(String viewName, String version); ViewEntity getDefinition(ResourceTypeEntity resourceTypeEntity); void addDefinition(ViewEntity definition); Collection<ViewInstanceEntity> getInstanceDefinitions(ViewEntity definition); ViewInstanceEntity getInstanceDefinition(String viewName, String version, String instanceName); void addInstanceDefinition(ViewEntity definition, ViewInstanceEntity instanceDefinition); void removeInstanceDefinition(ViewEntity definition, String instanceName); static void initInstance(ViewRegistry singleton); static ViewRegistry getInstance(); Set<SubResourceDefinition> getSubResourceDefinitions(
      String viewName, String version); void readViewArchives(); void readViewArchives(String viewNameRegExp); boolean instanceExists(ViewInstanceEntity instanceEntity); void installViewInstance(ViewInstanceEntity instanceEntity); void updateViewInstance(ViewInstanceEntity instanceEntity); void updateView(ViewInstanceEntity instanceEntity); ViewInstanceEntity getViewInstanceEntity(String viewName, String instanceName); @Transactional void uninstallViewInstance(ViewInstanceEntity instanceEntity); @Transactional void removeInstanceData(ViewInstanceEntity instanceEntity, String key); @Transactional void copyPrivileges(ViewInstanceEntity sourceInstanceEntity,
                             ViewInstanceEntity targetInstanceEntity); void fireEvent(Event event); synchronized void registerListener(Listener listener, String viewName, String viewVersion); synchronized void unregisterListener(Listener listener, String viewName, String viewVersion); boolean hasPermission(PermissionEntity permissionEntity, ResourceEntity resourceEntity, String userName); boolean checkPermission(String viewName, String version, String instanceName, boolean readOnly); boolean checkPermission(ViewInstanceEntity instanceEntity, boolean readOnly); boolean checkAdmin(); boolean includeDefinition(ViewEntity definitionEntity); void setViewInstanceProperties(ViewInstanceEntity instanceEntity, Map<String, String> properties,
                                        ViewConfig viewConfig, ClassLoader classLoader); Cluster getCluster(ViewInstanceDefinition viewInstance); @Subscribe @AllowConcurrentEvents void onAmbariEvent(ServiceInstalledEvent event); @Subscribe void onClusterConfigFinishedEvent(ClusterConfigFinishedEvent event); void readViewArchive(Path path); static final String API_PREFIX; static final String DEFAULT_AUTO_INSTANCE_URL; }
@Test public void testInstallViewInstance() throws Exception { ViewRegistry registry = ViewRegistry.getInstance(); Properties properties = new Properties(); properties.put("p1", "v1"); Configuration ambariConfig = new Configuration(properties); ViewConfig config = ViewConfigTest.getConfig(XML_VALID_INSTANCE); ViewEntity viewEntity = getViewEntity(config, ambariConfig, getClass().getClassLoader(), ""); ViewInstanceEntity viewInstanceEntity = getViewInstanceEntity(viewEntity, config.getInstances().get(0)); expect(viewInstanceDAO.merge(viewInstanceEntity)).andReturn(viewInstanceEntity); handlerList.addViewInstance(viewInstanceEntity); replay(viewDAO, viewInstanceDAO, resourceTypeDAO, securityHelper, handlerList); registry.addDefinition(viewEntity); registry.installViewInstance(viewInstanceEntity); Collection<ViewInstanceEntity> viewInstanceDefinitions = registry.getInstanceDefinitions(viewEntity); Assert.assertEquals(1, viewInstanceDefinitions.size()); ViewInstanceEntity instanceEntity = viewInstanceDefinitions.iterator().next(); Assert.assertEquals("v2-1", instanceEntity.getProperty("p2").getValue() ); Assert.assertEquals(viewInstanceEntity, viewInstanceDefinitions.iterator().next()); Assert.assertEquals("MY_VIEW{1.0.0}", viewInstanceEntity.getResource().getResourceType().getName()); verify(viewDAO, viewInstanceDAO, resourceTypeDAO, securityHelper, handlerList); }