// Copyright 2012 Citrix Systems, Inc. Licensed under the
// Apache License, Version 2.0 (the "License"); you may not use this
// file except in compliance with the License. Citrix Systems, Inc.
// reserves all rights not expressly granted by 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.
//
// Automatically generated by addcopyright.py at 04/03/2012
package com.cloud.offerings.dao;
import java.util.List;
import javax.ejb.Local;
import javax.persistence.EntityExistsException;
import com.cloud.network.Network;
import com.cloud.network.Networks.TrafficType;
import com.cloud.offering.NetworkOffering;
import com.cloud.offering.NetworkOffering.Availability;
import com.cloud.offerings.NetworkOfferingVO;
import com.cloud.utils.db.DB;
import com.cloud.utils.db.GenericDaoBase;
import com.cloud.utils.db.GenericSearchBuilder;
import com.cloud.utils.db.SearchBuilder;
import com.cloud.utils.db.SearchCriteria;
import com.cloud.utils.db.SearchCriteria.Op;
import com.cloud.utils.db.Transaction;
@Local(value = NetworkOfferingDao.class)
@DB(txn = false)
public class NetworkOfferingDaoImpl extends GenericDaoBase<NetworkOfferingVO, Long> implements NetworkOfferingDao {
final SearchBuilder<NetworkOfferingVO> NameSearch;
final SearchBuilder<NetworkOfferingVO> SystemOfferingSearch;
final SearchBuilder<NetworkOfferingVO> AvailabilitySearch;
final SearchBuilder<NetworkOfferingVO> AllFieldsSearch;
private final GenericSearchBuilder<NetworkOfferingVO, Long> UpgradeSearch;
protected NetworkOfferingDaoImpl() {
super();
NameSearch = createSearchBuilder();
NameSearch.and("name", NameSearch.entity().getName(), SearchCriteria.Op.EQ);
NameSearch.and("uniqueName", NameSearch.entity().getUniqueName(), SearchCriteria.Op.EQ);
NameSearch.done();
SystemOfferingSearch = createSearchBuilder();
SystemOfferingSearch.and("system", SystemOfferingSearch.entity().isSystemOnly(), SearchCriteria.Op.EQ);
SystemOfferingSearch.done();
AvailabilitySearch = createSearchBuilder();
AvailabilitySearch.and("availability", AvailabilitySearch.entity().getAvailability(), SearchCriteria.Op.EQ);
AvailabilitySearch.and("isSystem", AvailabilitySearch.entity().isSystemOnly(), SearchCriteria.Op.EQ);
AvailabilitySearch.done();
AllFieldsSearch = createSearchBuilder();
AllFieldsSearch.and("trafficType", AllFieldsSearch.entity().getTrafficType(), SearchCriteria.Op.EQ);
AllFieldsSearch.and("guestType", AllFieldsSearch.entity().getGuestType(), SearchCriteria.Op.EQ);
AllFieldsSearch.and("isSystem", AllFieldsSearch.entity().isSystemOnly(), SearchCriteria.Op.EQ);
AllFieldsSearch.and("state", AllFieldsSearch.entity().getState(), SearchCriteria.Op.EQ);
AllFieldsSearch.done();
UpgradeSearch = createSearchBuilder(Long.class);
UpgradeSearch.selectField(UpgradeSearch.entity().getId());
UpgradeSearch.and("physicalNetworkId", UpgradeSearch.entity().getId(), Op.NEQ);
UpgradeSearch.and("physicalNetworkId", UpgradeSearch.entity().isSystemOnly(), Op.EQ);
UpgradeSearch.and("trafficType", UpgradeSearch.entity().getTrafficType(), Op.EQ);
UpgradeSearch.and("guestType", UpgradeSearch.entity().getGuestType(), Op.EQ);
UpgradeSearch.and("state", UpgradeSearch.entity().getState(), Op.EQ);
UpgradeSearch.done();
}
@Override
public NetworkOfferingVO findByUniqueName(String uniqueName) {
SearchCriteria<NetworkOfferingVO> sc = NameSearch.create();
sc.setParameters("uniqueName", uniqueName);
return findOneBy(sc);
}
@Override
public NetworkOfferingVO persistDefaultNetworkOffering(NetworkOfferingVO offering) {
assert offering.getUniqueName() != null : "how are you going to find this later if you don't set it?";
NetworkOfferingVO vo = findByUniqueName(offering.getUniqueName());
if (vo != null) {
return vo;
}
try {
vo = persist(offering);
return vo;
} catch (EntityExistsException e) {
// Assume it's conflict on unique name from two different management servers.
return findByUniqueName(offering.getName());
}
}
@Override
public List<NetworkOfferingVO> listSystemNetworkOfferings() {
SearchCriteria<NetworkOfferingVO> sc = SystemOfferingSearch.create();
sc.setParameters("system", true);
return this.listIncludingRemovedBy(sc, null);
}
@Override
public List<NetworkOfferingVO> listByAvailability(Availability availability, boolean isSystem) {
SearchCriteria<NetworkOfferingVO> sc = AvailabilitySearch.create();
sc.setParameters("availability", availability);
sc.setParameters("isSystem", isSystem);
return listBy(sc, null);
}
@Override
@DB
public boolean remove(Long networkOfferingId) {
Transaction txn = Transaction.currentTxn();
txn.start();
NetworkOfferingVO offering = findById(networkOfferingId);
offering.setUniqueName(null);
update(networkOfferingId, offering);
boolean result = super.remove(networkOfferingId);
txn.commit();
return result;
}
@Override
public List<Long> getOfferingIdsToUpgradeFrom(NetworkOffering originalOffering) {
SearchCriteria<Long> sc = UpgradeSearch.create();
// exclude original offering
sc.addAnd("id", SearchCriteria.Op.NEQ, originalOffering.getId());
// list only non-system offerings
sc.addAnd("systemOnly", SearchCriteria.Op.EQ, false);
// Type of the network should be the same
sc.addAnd("guestType", SearchCriteria.Op.EQ, originalOffering.getGuestType());
// Traffic types should be the same
sc.addAnd("trafficType", SearchCriteria.Op.EQ, originalOffering.getTrafficType());
sc.addAnd("state", SearchCriteria.Op.EQ, NetworkOffering.State.Enabled);
//specify Vlan should be the same
sc.addAnd("specifyVlan", SearchCriteria.Op.EQ, originalOffering.getSpecifyVlan());
return customSearch(sc, null);
}
@Override
public List<NetworkOfferingVO> listByTrafficTypeGuestTypeAndState(NetworkOffering.State state, TrafficType trafficType, Network.GuestType type) {
SearchCriteria<NetworkOfferingVO> sc = AllFieldsSearch.create();
sc.setParameters("trafficType", trafficType);
sc.setParameters("guestType", type);
sc.setParameters("state", state);
return listBy(sc, null);
}
}