Search in sources :

Example 6 with IEnvironment

use of org.jboss.tools.hibernate.runtime.spi.IEnvironment in project jbosstools-hibernate by jbosstools.

the class ServiceImplTest method testGetEnvironment.

@Test
public void testGetEnvironment() {
    IEnvironment environment = service.getEnvironment();
    Assert.assertNotNull(environment);
    Assert.assertEquals(environment.getTransactionManagerStrategy(), Environment.TRANSACTION_COORDINATOR_STRATEGY);
}
Also used : IEnvironment(org.jboss.tools.hibernate.runtime.spi.IEnvironment) Test(org.junit.Test)

Example 7 with IEnvironment

use of org.jboss.tools.hibernate.runtime.spi.IEnvironment in project jbosstools-hibernate by jbosstools.

the class CodeGenXMLFactory method createRoot.

@SuppressWarnings("unchecked")
protected Element createRoot() {
    ExporterAttributes attributes = null;
    try {
        attributes = new ExporterAttributes(lc);
    } catch (CoreException e) {
    // ignore
    }
    if (attributes == null) {
        return null;
    }
    Properties props = new Properties();
    if (attributes.isReverseEngineer()) {
        props.setProperty(ConfigurationXMLStrings.ISREVENG, Boolean.toString(attributes.isReverseEngineer()));
        props.setProperty(ConfigurationXMLStrings.PACKAGENAME, attributes.getPackageName());
        props.setProperty(ConfigurationXMLStrings.PREFERBASICCOMPOSITEIDS, Boolean.toString(attributes.isPreferBasicCompositeIds()));
        props.setProperty(ConfigurationXMLStrings.DETECTMANYTOMANY, Boolean.toString(attributes.detectManyToMany()));
        props.setProperty(ConfigurationXMLStrings.DETECTONTTOONE, Boolean.toString(attributes.detectOneToOne()));
        props.setProperty(ConfigurationXMLStrings.DETECTOPTIMISTICLOCK, Boolean.toString(attributes.detectOptimisticLock()));
        props.setProperty(ConfigurationXMLStrings.REVERSESTRATEGY, attributes.getRevengStrategy());
        String revEngFile = getResLocation(attributes.getRevengSettings());
        props.setProperty(ConfigurationXMLStrings.REVENGFILE, revEngFile);
    }
    // 
    final IPath pathPlace2Generate = isEmpty(place2Generate) ? null : new Path(getResLocation(place2Generate));
    final IPath pathWorkspacePath = isEmpty(workspacePath) ? null : new Path(getResLocation(workspacePath));
    // 
    String consoleConfigName = attributes.getConsoleConfigurationName();
    ConsoleConfigurationPreferences consoleConfigPrefs = getConsoleConfigPreferences(consoleConfigName);
    final ConfigurationXMLFactory configurationXMLFactory = new ConfigurationXMLFactory(consoleConfigPrefs, props);
    configurationXMLFactory.setPlace2Generate(pathPlace2Generate);
    configurationXMLFactory.setWorkspacePath(pathWorkspacePath);
    Element rootConsoleConfig = configurationXMLFactory.createRoot();
    // 
    // $NON-NLS-1$
    String defaultTargetName = "hibernateAntCodeGeneration";
    Element el, root = DocumentFactory.getInstance().createElement(CodeGenerationStrings.PROJECT);
    // $NON-NLS-1$
    root.addAttribute(CodeGenerationStrings.NAME, "CodeGen");
    root.addAttribute(CodeGenerationStrings.DEFAULT, defaultTargetName);
    // 
    if (!isEmpty(place2Generate)) {
        el = root.addElement(CodeGenerationStrings.PROPERTY);
        el.addAttribute(CodeGenerationStrings.NAME, varCurrentDir);
        el.addAttribute(CodeGenerationStrings.LOCATION, getPlace2GenerateUID());
    }
    if (!isEmpty(workspacePath)) {
        el = root.addElement(CodeGenerationStrings.PROPERTY);
        el.addAttribute(CodeGenerationStrings.NAME, varWorkspaceDir);
        el.addAttribute(CodeGenerationStrings.LOCATION, getWorkspacePathUID());
    }
    // 
    String location = getResLocation(attributes.getOutputPath());
    location = ConfigurationXMLFactory.makePathRelative(location, pathPlace2Generate, pathWorkspacePath);
    el = root.addElement(CodeGenerationStrings.PROPERTY);
    el.addAttribute(CodeGenerationStrings.NAME, varBuildDir);
    el.addAttribute(CodeGenerationStrings.LOCATION, location);
    // 
    String hibernatePropFile = null;
    String generateHibernatePropeties = null;
    String connProfileName = consoleConfigPrefs == null ? null : consoleConfigPrefs.getConnectionProfileName();
    IConnectionProfile profile = getConnectionProfile(connProfileName);
    boolean bPropFile = profile != null;
    // update property with fake tm
    Properties propsTmp = null;
    String[] versions = ServiceLookup.getVersions();
    String maxVersion = versions[versions.length - 1];
    String hibernateVersion = consoleConfigPrefs == null ? maxVersion : consoleConfigPrefs.getHibernateVersion();
    IService service = ServiceLookup.findService(hibernateVersion);
    IEnvironment environment = service.getEnvironment();
    if (consoleConfigPrefs != null && consoleConfigPrefs.getPropertyFile() != null) {
        propsTmp = consoleConfigPrefs.getProperties();
        String tmStrategy = propsTmp.getProperty(environment.getTransactionManagerStrategy());
        if (tmStrategy != null && StringHelper.isEmpty(tmStrategy)) {
            propsTmp.setProperty(environment.getTransactionManagerStrategy(), ConfigurationFactory.FAKE_TM_LOOKUP);
            bPropFile = true;
        }
    }
    if (bPropFile) {
        Set<String> specialProps = new TreeSet<String>();
        specialProps.add(environment.getDriver());
        specialProps.add(environment.getURL());
        specialProps.add(environment.getUser());
        specialProps.add(environment.getPass());
        specialProps.add(environment.getDialect());
        // 
        if (propsTmp == null) {
            propsTmp = new Properties();
        }
        StringBuilder propFileContent = new StringBuilder();
        String driverClass = getDriverClass(connProfileName);
        if (profile != null) {
            final Properties cpProperties = profile.getProperties(profile.getProviderId());
            // 
            String url = cpProperties.getProperty(IJDBCDriverDefinitionConstants.URL_PROP_ID);
            // 
            String user = cpProperties.getProperty(IJDBCDriverDefinitionConstants.USERNAME_PROP_ID);
            // 
            String pass = cpProperties.getProperty(IJDBCDriverDefinitionConstants.PASSWORD_PROP_ID);
            // 
            String dialectName = consoleConfigPrefs.getDialectName();
            // 
            propsTmp.setProperty(environment.getDriver(), driverClass);
            propsTmp.setProperty(environment.getURL(), url);
            propsTmp.setProperty(environment.getUser(), user);
            propsTmp.setProperty(environment.getPass(), pass);
            if (StringHelper.isNotEmpty(dialectName)) {
                propsTmp.setProperty(environment.getDialect(), dialectName);
            }
        }
        // output keys in sort order
        Object[] keys = propsTmp.keySet().toArray();
        Arrays.sort(keys);
        // 
        if (externalPropFile) {
            for (Object obj : keys) {
                addIntoPropFileContent(propFileContent, obj.toString(), propsTmp.getProperty(obj.toString()));
            }
        } else {
            for (Object obj : keys) {
                if (specialProps.contains(obj)) {
                    el = root.addElement(CodeGenerationStrings.PROPERTY);
                    el.addAttribute(CodeGenerationStrings.NAME, obj.toString());
                    el.addAttribute(CodeGenerationStrings.VALUE, propsTmp.getProperty(obj.toString()));
                    addIntoPropFileContent(propFileContent, obj.toString());
                } else {
                    addIntoPropFileContent(propFileContent, obj.toString(), propsTmp.getProperty(obj.toString()));
                }
            }
        }
        if (externalPropFile) {
            hibernatePropFile = externalPropFileName;
        } else {
            // $NON-NLS-1$
            hibernatePropFile = "hibernatePropFile";
            el = root.addElement(CodeGenerationStrings.PROPERTY);
            el.addAttribute(CodeGenerationStrings.NAME, hibernatePropFile);
            // $NON-NLS-1$
            el.addAttribute(CodeGenerationStrings.VALUE, "${java.io.tmpdir}${ant.project.name}-hibernate.properties");
            // 
            // $NON-NLS-1$
            generateHibernatePropeties = "generateHibernatePropeties";
            Element target = root.addElement(CodeGenerationStrings.TARGET);
            target.addAttribute(CodeGenerationStrings.NAME, generateHibernatePropeties);
            // 
            hibernatePropFile = getVar(hibernatePropFile);
            Element echo = target.addElement(CodeGenerationStrings.ECHO);
            echo.addAttribute(CodeGenerationStrings.FILE, hibernatePropFile);
            echo.addText(getPropFileContentStubUID());
        }
        propFileContentPreSave = propFileContent.toString().trim();
    }
    // all jars from libraries should be here
    // $NON-NLS-1$
    String toolslibID = "toolslib";
    Element toolslib = root.addElement(CodeGenerationStrings.PATH);
    toolslib.addAttribute(CodeGenerationStrings.ID, toolslibID);
    final URL[] customClassPathURLs = PreferencesClassPathUtils.getCustomClassPathURLs(consoleConfigPrefs);
    for (int i = 0; i < customClassPathURLs.length; i++) {
        if (customClassPathURLs[i] == null) {
            continue;
        }
        // what is right here: CodeGenerationStrings.PATH or CodeGenerationStrings.PATHELEMENT?
        // http://www.redhat.com/docs/en-US/JBoss_Developer_Studio/en/hibernatetools/html/ant.html
        // use CodeGenerationStrings.PATH - so may be error in documentation?
        Element pathItem = toolslib.addElement(CodeGenerationStrings.PATH);
        // Element pathItem = toolslib.addElement(CodeGenerationStrings.PATHELEMENT);
        String strPathItem = customClassPathURLs[i].getPath();
        try {
            strPathItem = (new java.io.File(customClassPathURLs[i].toURI())).getPath();
        } catch (URISyntaxException e) {
        // ignore
        }
        strPathItem = new Path(strPathItem).toString();
        strPathItem = ConfigurationXMLFactory.makePathRelative(strPathItem, pathPlace2Generate, pathWorkspacePath);
        pathItem.addAttribute(CodeGenerationStrings.LOCATION, strPathItem);
    }
    // 
    Element target = root.addElement(CodeGenerationStrings.TARGET);
    target.addAttribute(CodeGenerationStrings.NAME, defaultTargetName);
    if (!isEmpty(generateHibernatePropeties)) {
        target.addAttribute(CodeGenerationStrings.DEPENDS, generateHibernatePropeties);
    }
    // 
    Element taskdef = target.addElement(CodeGenerationStrings.TASKDEF);
    taskdef.addAttribute(CodeGenerationStrings.NAME, CodeGenerationStrings.HIBERNATETOOL);
    // $NON-NLS-1$
    taskdef.addAttribute(CodeGenerationStrings.CLASSNAME, "org.hibernate.tool.ant.HibernateToolTask");
    taskdef.addAttribute(CodeGenerationStrings.CLASSPATHREF, toolslibID);
    // 
    Element hibernatetool = target.addElement(CodeGenerationStrings.HIBERNATETOOL);
    hibernatetool.addAttribute(CodeGenerationStrings.DESTDIR, getVar(varBuildDir));
    if (attributes.isUseOwnTemplates()) {
        String templatePath = getResLocation(attributes.getTemplatePath());
        hibernatetool.addAttribute(CodeGenerationStrings.TEMPLATEPATH, templatePath);
    }
    if (rootConsoleConfig != null) {
        if (StringHelper.isNotEmpty(hibernatePropFile)) {
            rootConsoleConfig.addAttribute(ConfigurationXMLStrings.PROPERTYFILE, hibernatePropFile);
        }
        // add hibernate console configuration
        hibernatetool.content().add(rootConsoleConfig);
    }
    // 
    // the path there are user classes
    Element classpath = hibernatetool.addElement(CodeGenerationStrings.CLASSPATH);
    Element path = classpath.addElement(CodeGenerationStrings.PATH);
    path.addAttribute(CodeGenerationStrings.LOCATION, getVar(varBuildDir));
    // 
    Map<String, Map<String, AttributeDescription>> exportersDescr = ExportersXMLAttributeDescription.getExportersDescription();
    Map<String, Set<String>> exportersSetSubTags = ExportersXMLAttributeDescription.getExportersSetSubTags();
    // 
    Properties globalProps = new Properties();
    // obligatory global properties
    // $NON-NLS-1$
    globalProps.put(CodeGenerationStrings.EJB3, "" + attributes.isEJB3Enabled());
    // $NON-NLS-1$
    globalProps.put(CodeGenerationStrings.JDK5, "" + attributes.isJDK5Enabled());
    List<ExporterFactory> exporterFactories = attributes.getExporterFactories();
    for (Iterator<ExporterFactory> iter = exporterFactories.iterator(); iter.hasNext(); ) {
        ExporterFactory ef = iter.next();
        if (!ef.isEnabled(lc)) {
            continue;
        }
        // Map<String, ExporterProperty> defExpProps = ef.getDefaultExporterProperties();
        // String expId = ef.getId();
        String expDefId = ef.getExporterDefinitionId();
        String expName = ef.getExporterTag();
        // mapping: guiName -> AttributeDescription
        Map<String, AttributeDescription> attributesDescrGui = exportersDescr.get(expName);
        if (attributesDescrGui == null) {
            attributesDescrGui = new TreeMap<String, AttributeDescription>();
        }
        // mapping: guiName -> set of sub tags
        Set<String> setSubTags = exportersSetSubTags.get(expName);
        if (setSubTags == null) {
            setSubTags = new TreeSet<String>();
        }
        // construct new mapping: name -> AttributeDescription
        Map<String, AttributeDescription> attributesDescrAnt = new TreeMap<String, AttributeDescription>();
        for (AttributeDescription ad : attributesDescrGui.values()) {
            attributesDescrAnt.put(ad.name, ad);
        }
        // 
        Element exporter = hibernatetool.addElement(expName);
        Properties expProps = new Properties();
        expProps.putAll(globalProps);
        expProps.putAll(ef.getProperties());
        // 
        Properties extractGUISpecial = new Properties();
        try {
            ExporterFactory.extractExporterProperties(expDefId, expProps, extractGUISpecial);
        } catch (CoreException e) {
        // ignore
        }
        // convert gui special properties names into Ant names
        for (Map.Entry<Object, Object> propEntry : extractGUISpecial.entrySet()) {
            Object key = propEntry.getKey();
            Object val = propEntry.getValue();
            AttributeDescription ad = attributesDescrGui.get(key);
            if (ad == null) {
                expProps.put(key, val);
                continue;
            }
            expProps.put(ad.name, val);
        }
        // to add attributes and properties in alphabetic order
        Map<String, Object> expPropsSorted = new TreeMap<String, Object>();
        for (Map.Entry<Object, Object> propEntry : expProps.entrySet()) {
            Object key = propEntry.getKey();
            Object val = propEntry.getValue();
            expPropsSorted.put(key.toString(), val);
        }
        // list2Remove - list to collect properties which put into attributes,
        // all other properties be ordinal property definition
        List<Object> list2Remove = new ArrayList<Object>();
        for (Map.Entry<String, Object> propEntry : expPropsSorted.entrySet()) {
            Object key = propEntry.getKey();
            Object val = propEntry.getValue();
            AttributeDescription ad = attributesDescrAnt.get(key);
            if (ad == null) {
                continue;
            }
            list2Remove.add(key);
            if (val == null || 0 == val.toString().compareTo(ad.defaultValue)) {
                continue;
            }
            String processedVal = processPropertyValue(val);
            if (setSubTags.contains(ad.guiName)) {
                Element subTag = exporter.addElement(ad.name);
                subTag.addText(processedVal);
            } else {
                exporter.addAttribute(ad.name, processedVal);
            }
        }
        for (Object obj : list2Remove) {
            expProps.remove(obj);
            expPropsSorted.remove(obj);
        }
        for (Map.Entry<String, Object> propEntry : expPropsSorted.entrySet()) {
            Object key = propEntry.getKey();
            Object val = propEntry.getValue();
            String processedVal = processPropertyValue(val);
            Element property = exporter.addElement(CodeGenerationStrings.PROPERTY);
            property.addAttribute(CodeGenerationStrings.KEY, key.toString());
            property.addAttribute(CodeGenerationStrings.VALUE, processedVal);
        }
    }
    return root;
}
Also used : TreeSet(java.util.TreeSet) Set(java.util.Set) Element(org.dom4j.Element) ArrayList(java.util.ArrayList) URISyntaxException(java.net.URISyntaxException) Properties(java.util.Properties) URL(java.net.URL) TreeSet(java.util.TreeSet) IConnectionProfile(org.eclipse.datatools.connectivity.IConnectionProfile) IService(org.jboss.tools.hibernate.runtime.spi.IService) IPath(org.eclipse.core.runtime.IPath) Path(org.eclipse.core.runtime.Path) IPath(org.eclipse.core.runtime.IPath) TreeMap(java.util.TreeMap) AttributeDescription(org.hibernate.eclipse.launch.ExportersXMLAttributeDescription.AttributeDescription) CoreException(org.eclipse.core.runtime.CoreException) ConsoleConfigurationPreferences(org.hibernate.console.preferences.ConsoleConfigurationPreferences) ExporterFactory(org.hibernate.eclipse.console.model.impl.ExporterFactory) IEnvironment(org.jboss.tools.hibernate.runtime.spi.IEnvironment) ConfigurationXMLFactory(org.hibernate.console.ConfigurationXMLFactory) Map(java.util.Map) TreeMap(java.util.TreeMap)

Example 8 with IEnvironment

use of org.jboss.tools.hibernate.runtime.spi.IEnvironment in project jbosstools-hibernate by jbosstools.

the class ConsoleConfiguration method getConfigXMLFile.

public File getConfigXMLFile() {
    IEnvironment environment = getHibernateExtension().getHibernateService().getEnvironment();
    File configXMLFile = null;
    if (prefs != null) {
        configXMLFile = prefs.getConfigXMLFile();
    }
    if (configXMLFile == null) {
        URL url = null;
        // reinitClassLoader();
        if (classLoader != null) {
            // $NON-NLS-1$
            url = classLoader.findResource("hibernate.cfg.xml");
        }
        if (url != null) {
            URI uri = null;
            try {
                uri = url.toURI();
                configXMLFile = new File(uri);
            } catch (URISyntaxException e) {
            // ignore
            }
        }
    }
    if (configXMLFile == null) {
        // $NON-NLS-1$
        URL url = environment.getWrappedClass().getClassLoader().getResource("hibernate.cfg.xml");
        if (url != null) {
            URI uri = null;
            try {
                uri = url.toURI();
                configXMLFile = new File(uri);
            } catch (URISyntaxException e) {
            // ignore
            }
        }
    }
    return configXMLFile;
}
Also used : IEnvironment(org.jboss.tools.hibernate.runtime.spi.IEnvironment) URISyntaxException(java.net.URISyntaxException) File(java.io.File) URI(java.net.URI) URL(java.net.URL)

Example 9 with IEnvironment

use of org.jboss.tools.hibernate.runtime.spi.IEnvironment in project jbosstools-hibernate by jbosstools.

the class HBMInfoExtractor method extractHibernateProperties.

private String[] extractHibernateProperties() {
    try {
        // TODO: extract property names from the Environment class in the users hibernate configuration.
        IEnvironment environment = service.getEnvironment();
        Class cl = environment.getWrappedClass();
        List names = new ArrayList();
        Field[] fields = cl.getFields();
        for (int i = 0; i < fields.length; i++) {
            Field field = fields[i];
            if (Modifier.isStatic(field.getModifiers()) && field.getType().equals(String.class)) {
                String str = (String) field.get(cl);
                if (str.startsWith("hibernate.")) {
                    // $NON-NLS-1$
                    names.add(str);
                }
            }
        }
        String[] propertyNames = (String[]) names.toArray(new String[names.size()]);
        Arrays.sort(propertyNames);
        return propertyNames;
    } catch (IllegalAccessException iae) {
        // ignore
        return new String[0];
    }
}
Also used : IField(org.eclipse.jdt.core.IField) Field(java.lang.reflect.Field) ArrayList(java.util.ArrayList) IEnvironment(org.jboss.tools.hibernate.runtime.spi.IEnvironment) ArrayList(java.util.ArrayList) List(java.util.List)

Example 10 with IEnvironment

use of org.jboss.tools.hibernate.runtime.spi.IEnvironment in project jbosstools-hibernate by jbosstools.

the class TestConsoleConfigurationPreferences method getProperties.

public Properties getProperties() {
    IEnvironment environment = getService().getEnvironment();
    Properties p = new Properties();
    // $NON-NLS-1$
    p.setProperty(environment.getDialect(), "org.hibernate.dialect.HSQLDialect");
    return p;
}
Also used : IEnvironment(org.jboss.tools.hibernate.runtime.spi.IEnvironment) Properties(java.util.Properties)

Aggregations

IEnvironment (org.jboss.tools.hibernate.runtime.spi.IEnvironment)15 Test (org.junit.Test)8 Properties (java.util.Properties)4 URISyntaxException (java.net.URISyntaxException)2 URL (java.net.URL)2 ArrayList (java.util.ArrayList)2 File (java.io.File)1 Field (java.lang.reflect.Field)1 URI (java.net.URI)1 Connection (java.sql.Connection)1 SQLException (java.sql.SQLException)1 List (java.util.List)1 Map (java.util.Map)1 Set (java.util.Set)1 TreeMap (java.util.TreeMap)1 TreeSet (java.util.TreeSet)1 Element (org.dom4j.Element)1 CoreException (org.eclipse.core.runtime.CoreException)1 IPath (org.eclipse.core.runtime.IPath)1 Path (org.eclipse.core.runtime.Path)1