| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you 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.netbeans.modules.gradle.persistence; |
| |
| import java.beans.PropertyChangeEvent; |
| import java.beans.PropertyChangeListener; |
| import java.io.File; |
| import java.util.concurrent.atomic.AtomicBoolean; |
| import org.netbeans.modules.j2ee.persistence.api.PersistenceScope; |
| import org.netbeans.modules.j2ee.persistence.api.PersistenceScopes; |
| import org.netbeans.modules.j2ee.persistence.spi.PersistenceScopeProvider; |
| import org.netbeans.modules.j2ee.persistence.spi.PersistenceScopesProvider; |
| import org.netbeans.modules.j2ee.persistence.spi.support.PersistenceScopesHelper; |
| import org.openide.filesystems.FileUtil; |
| |
| /** |
| * Gradle Implementation of <CODE>org.netbeans.modules.j2ee.persistence.spi.PersistenceScopesProvider</CODE> also |
| * implements PropertyChangeListener to watch for changes on the persistence.xml file |
| * |
| * @author Daniel Mohni |
| */ |
| public class PersistenceScopesProviderImpl implements PersistenceScopesProvider, PropertyChangeListener { |
| |
| private PersistenceScopesHelper scopesHelper = null; |
| private PersistenceScopeProvider scopeProvider = null; |
| private final AtomicBoolean checked = new AtomicBoolean(); |
| |
| /** |
| * Creates a new instance of PersistenceScopesProviderImpl |
| * |
| * @param provider the PersistenceScopeProvider instance to use for lookups |
| */ |
| public PersistenceScopesProviderImpl(PersistenceScopeProvider provider) { |
| scopesHelper = new PersistenceScopesHelper(); |
| scopeProvider = provider; |
| } |
| |
| /** |
| * property access to the persistence scopes |
| * |
| * @return the PersistenceScopes instance of the current project |
| */ |
| @Override |
| public PersistenceScopes getPersistenceScopes() { |
| if (checked.compareAndSet(false, true)) { |
| checkScope(); |
| } |
| return scopesHelper.getPersistenceScopes(); |
| } |
| |
| /** |
| * checks and initialise, updates the PersistenceScopeHelper of the current project |
| */ |
| private void checkScope() { |
| PersistenceScope scope = scopeProvider.findPersistenceScope(null); |
| |
| if (scope != null) { |
| File persistenceXml = FileUtil.toFile(scope.getPersistenceXml()); |
| scopesHelper.changePersistenceScope(scope, persistenceXml); |
| } else { |
| scopesHelper.changePersistenceScope(null, null); |
| } |
| } |
| |
| /** |
| * watches for creation and deletion of the persistence.xml file |
| * |
| * @param evt the change event to process |
| */ |
| @Override |
| public void propertyChange(PropertyChangeEvent evt) { |
| if (GradlePersistenceProvider.PROP_PERSISTENCE.equals(evt.getPropertyName())) { |
| checkScope(); |
| } |
| } |
| |
| } |