Example usage for org.hibernate.type LongType INSTANCE

List of usage examples for org.hibernate.type LongType INSTANCE

Introduction

In this page you can find the example usage for org.hibernate.type LongType INSTANCE.

Prototype

LongType INSTANCE

To view the source code for org.hibernate.type LongType INSTANCE.

Click Source Link

Usage

From source file:org.unitime.timetable.server.solver.TimetableGridSolverHelper.java

License:Apache License

public static void fixInstructors(TimetableGridModel model, TimetableGridContext context) {
    Map<Long, List<TimetableGridCell>> id2cells = new HashMap<Long, List<TimetableGridCell>>();
    for (TimetableGridCell cell : model.getCells()) {
        if (cell.getType() != Type.Class || cell.getId() == null || cell.getId() < 0 || !cell.isCommitted())
            continue;
        List<TimetableGridCell> cells = id2cells.get(cell.getId());
        if (cells == null) {
            cells = new ArrayList<TimetableGridCell>();
            id2cells.put(cell.getId(), cells);
        }/*w  w w .  j  ava 2s .  c  o m*/
        cell.resetInstructors();
        cells.add(cell);
    }
    if (id2cells.isEmpty())
        return;

    String query = null;
    if (ApplicationProperty.TimetableGridUseClassInstructors.isTrue()) {
        query = "select ci.classInstructing.uniqueId, ci.instructor from ClassInstructor ci "
                + "where ci.classInstructing.uniqueId in :classIds";
        if (ApplicationProperty.TimetableGridUseClassInstructorsCheckClassDisplayInstructors.isTrue())
            query += " and ci.classInstructing.displayInstructor = true";
        if (ApplicationProperty.TimetableGridUseClassInstructorsCheckLead.isTrue())
            query += " and ci.lead = true";
    } else {
        query = "select a.clazz.uniqueId, i from Assignment a inner join a.instructors i "
                + "where a.solution.commited = true and a.clazz.uniqueId in :classIds";
    }

    if (id2cells.size() <= 1000) {
        for (Object[] o : (List<Object[]>) Class_DAO.getInstance().getSession().createQuery(query)
                .setParameterList("classIds", id2cells.keySet(), LongType.INSTANCE).setCacheable(true).list()) {
            Long classId = (Long) o[0];
            DepartmentalInstructor instructor = (DepartmentalInstructor) o[1];
            for (TimetableGridCell cell : id2cells.get(classId)) {
                cell.addInstructor(instructor.getName(context.getInstructorNameFormat()));
            }
        }
    } else {
        List<Long> ids = new ArrayList<Long>(1000);
        for (Long id : id2cells.keySet()) {
            ids.add(id);
            if (ids.size() == 1000) {
                for (Object[] o : (List<Object[]>) Class_DAO.getInstance().getSession().createQuery(query)
                        .setParameterList("classIds", ids, LongType.INSTANCE).setCacheable(true).list()) {
                    Long classId = (Long) o[0];
                    DepartmentalInstructor instructor = (DepartmentalInstructor) o[1];
                    for (TimetableGridCell cell : id2cells.get(classId)) {
                        cell.addInstructor(instructor.getName(context.getInstructorNameFormat()));
                    }
                }
                ids.clear();
            }
        }
        if (!ids.isEmpty()) {
            for (Object[] o : (List<Object[]>) Class_DAO.getInstance().getSession().createQuery(query)
                    .setParameterList("classIds", ids, LongType.INSTANCE).setCacheable(true).list()) {
                Long classId = (Long) o[0];
                DepartmentalInstructor instructor = (DepartmentalInstructor) o[1];
                for (TimetableGridCell cell : id2cells.get(classId)) {
                    cell.addInstructor(instructor.getName(context.getInstructorNameFormat()));
                }
            }
        }
    }
}

From source file:org.yamj.core.api.model.DataItemTools.java

License:Open Source License

/**
 * Add scalars for the data items// w  w  w .j a v a2  s . com
 *
 * @param sqlScalars
 * @param dataItems
 */
public static void addDataItemScalars(SqlScalars sqlScalars, List<DataItem> dataItems) {
    for (DataItem item : dataItems) {
        if (item.isNotColumn()) {
            // This is not a specific scalar and is not needed
            continue;
        }
        if (item == DataItem.TOP_RANK) {
            sqlScalars.addScalar("topRank", LongType.INSTANCE);
            continue;
        }
        // This is the default approach
        sqlScalars.addScalar(item.toString().toLowerCase(), StringType.INSTANCE);
    }
}

From source file:org.yamj.core.database.dao.ApiDao.java

License:Open Source License

/**
 * Generate the query and load the results into the wrapper
 *
 * @param wrapper/*from   w w w  . j  av a 2 s.c om*/
 */
@SuppressWarnings({ "unchecked", "rawtypes" })
public void getVideoList(ApiWrapperList<ApiVideoDTO> wrapper) {
    OptionsIndexVideo options = (OptionsIndexVideo) wrapper.getOptions();
    IndexParams params = new IndexParams(options);

    SqlScalars sqlScalars = new SqlScalars(generateSqlForVideoList(params));
    sqlScalars.addScalar(ID, LongType.INSTANCE);
    sqlScalars.addScalar("videoTypeString", StringType.INSTANCE);
    sqlScalars.addScalar(TITLE, StringType.INSTANCE);
    sqlScalars.addScalar(ORIGINAL_TITLE, StringType.INSTANCE);
    sqlScalars.addScalar(VIDEO_YEAR, IntegerType.INSTANCE);
    sqlScalars.addScalar(SERIES_ID, LongType.INSTANCE);
    sqlScalars.addScalar(SEASON_ID, LongType.INSTANCE);
    sqlScalars.addScalar(SEASON, LongType.INSTANCE);
    sqlScalars.addScalar(WATCHED, BooleanType.INSTANCE);

    if (params.includeNewest() || params.excludeNewest()) {
        sqlScalars.addScalar("newest", TimestampType.INSTANCE);
    }

    // add Scalars for additional data item columns
    DataItemTools.addDataItemScalars(sqlScalars, params.getDataItems());
    // add additional parameters
    params.addScalarParameters(sqlScalars);

    DataItemTools.addDataItemScalars(sqlScalars, params.getDataItems());

    List<ApiVideoDTO> queryResults = executeQueryWithTransform(ApiVideoDTO.class, sqlScalars, wrapper);
    wrapper.setResults(queryResults);

    if (CollectionUtils.isNotEmpty(queryResults)) {

        if (params.hasDataItem(DataItem.GENRE)) {
            LOG.trace("Adding genres to index videos");
            for (ApiVideoDTO video : queryResults) {
                video.setGenres(this.getGenresForId(video.getVideoType(), video.getId()));
            }
        }

        if (params.hasDataItem(DataItem.STUDIO)) {
            LOG.trace("Adding studios to index videos");
            for (ApiVideoDTO video : queryResults) {
                video.setStudios(this.getStudiosForId(video.getVideoType(), video.getId()));
            }
        }

        if (params.hasDataItem(DataItem.COUNTRY)) {
            LOG.trace("Adding countries to index videos");
            for (ApiVideoDTO video : queryResults) {
                video.setCountries(this.getCountriesForId(video.getVideoType(), video.getId()));
            }
        }

        if (params.hasDataItem(DataItem.CERTIFICATION)) {
            LOG.trace("Adding certifications to index videos");
            for (ApiVideoDTO video : queryResults) {
                video.setCertifications(this.getCertificationsForId(video.getVideoType(), video.getId()));
            }
        }

        if (params.hasDataItem(DataItem.RATING)) {
            LOG.trace("Adding ratings to index videos");
            for (ApiVideoDTO video : queryResults) {
                video.setRatings(this.getRatingsForId(video.getVideoType(), video.getId()));
            }
        }

        if (params.hasDataItem(DataItem.AWARD)) {
            LOG.trace("Adding awards to index videos");
            for (ApiVideoDTO video : queryResults) {
                video.setAwards(this.getAwardsForId(video.getVideoType(), video.getId()));
            }
        }

        if (params.hasDataItem(DataItem.EXTERNALID)) {
            LOG.trace("Adding external IDs to index videos");
            for (ApiVideoDTO video : queryResults) {
                video.setExternalIds(this.getExternalIdsForId(video.getVideoType(), video.getId()));
            }
        }

        if (params.hasDataItem(DataItem.BOXSET)) {
            LOG.trace("Adding boxed sets to index videos");
            for (ApiVideoDTO video : queryResults) {
                video.setBoxedSets(this.getBoxedSetsForId(video.getVideoType(), video.getId()));
            }
        }

        if (params.hasDataItem(DataItem.TRAILER)) {
            LOG.trace("Adding trailers to index videos");
            for (ApiVideoDTO video : queryResults) {
                video.setTrailers(this.getTrailersForId(video.getVideoType(), video.getId()));
            }
        }

        if (CollectionUtils.isNotEmpty(options.getArtworkTypes())) {
            // Create and populate the ID list
            Map<MetaDataType, List<Long>> ids = new EnumMap<>(MetaDataType.class);
            for (MetaDataType mdt : MetaDataType.values()) {
                ids.put(mdt, new ArrayList());
            }

            Map<String, ApiVideoDTO> results = new HashMap<>();

            for (ApiVideoDTO video : queryResults) {
                // Add the item to the map for further processing
                results.put(ApiArtworkDTO.makeKey(video), video);
                // Add the ID to the list
                ids.get(video.getVideoType()).add(video.getId());
            }

            boolean foundArtworkIds = Boolean.FALSE; // Check to see that we have artwork to find
            // Remove any blank entries
            for (MetaDataType mdt : MetaDataType.values()) {
                if (CollectionUtils.isEmpty(ids.get(mdt))) {
                    ids.remove(mdt);
                } else {
                    // We've found an artwork, so we can continue
                    foundArtworkIds = Boolean.TRUE;
                }
            }

            if (foundArtworkIds) {
                LOG.trace("Found artwork to process, IDs: {}", ids);
                addArtworks(ids, results, options);
            } else {
                LOG.trace("No artwork found to process, skipping.");
            }
        } else {
            LOG.trace("Artwork not required, skipping.");
        }
    } else {
        LOG.debug("No results found to process.");
    }
}

From source file:org.yamj.core.database.dao.ApiDao.java

License:Open Source License

/**
 * Search the list of IDs for artwork and add to the artworkList.
 *
 * @param ids/*  w ww  . j  a v  a2 s . c  o m*/
 * @param artworkList
 * @param options
 */
private void addArtworks(Map<MetaDataType, List<Long>> ids, Map<String, ApiVideoDTO> artworkList,
        OptionsIndexVideo options) {
    Set<String> artworkRequired = options.getArtworkTypes();
    LOG.debug("Artwork required: {}", artworkRequired);

    if (CollectionUtils.isNotEmpty(artworkRequired)) {
        SqlScalars sqlScalars = new SqlScalars();
        boolean hasMovie = CollectionUtils.isNotEmpty(ids.get(MetaDataType.MOVIE));
        boolean hasSeries = CollectionUtils.isNotEmpty(ids.get(MetaDataType.SERIES));
        boolean hasSeason = CollectionUtils.isNotEmpty(ids.get(MetaDataType.SEASON));
        boolean hasEpisode = CollectionUtils.isNotEmpty(ids.get(MetaDataType.EPISODE));

        if (hasMovie) {
            sqlScalars.addToSql(
                    "SELECT 'MOVIE' as sourceString, v.id as sourceId, a.id as artworkId, al.id as locatedId, ag.id as generatedId, a.artwork_type as artworkTypeString, ag.cache_dir as cacheDir, ag.cache_filename as cacheFilename");
            sqlScalars.addToSql(" FROM videodata v, artwork a");
            sqlScalars.addToSql(SQL_LEFT_JOIN_ARTWORK_LOCATED);
            sqlScalars.addToSql(SQL_LEFT_JOIN_ARTWORK_GENERATED);
            sqlScalars.addToSql(" WHERE v.id=a.videodata_id");
            sqlScalars.addToSql(" AND v.episode<0");
            sqlScalars.addToSql(" AND v.id IN (:movielist)");
            sqlScalars.addToSql(SQL_ARTWORK_TYPE_IN_ARTWORKLIST);
        }

        if (hasMovie && hasSeries) {
            sqlScalars.addToSql(" UNION");
        }

        if (hasSeries) {
            sqlScalars.addToSql(
                    " SELECT 'SERIES' as sourceString, s.id as sourceId, a.id as artworkId, al.id as locatedId, ag.id as generatedId, a.artwork_type as artworkTypeString, ag.cache_dir as cacheDir, ag.cache_filename as cacheFilename");
            sqlScalars.addToSql(" FROM series s, artwork a");
            sqlScalars.addToSql(SQL_LEFT_JOIN_ARTWORK_LOCATED);
            sqlScalars.addToSql(SQL_LEFT_JOIN_ARTWORK_GENERATED);
            sqlScalars.addToSql(" WHERE s.id=a.series_id");
            sqlScalars.addToSql(" AND s.id IN (:serieslist)");
            sqlScalars.addToSql(SQL_ARTWORK_TYPE_IN_ARTWORKLIST);
        }

        if ((hasMovie || hasSeries) && hasSeason) {
            sqlScalars.addToSql(" UNION");
        }

        if (hasSeason) {
            sqlScalars.addToSql(
                    " SELECT 'SEASON' as sourceString, s.id as sourceId, a.id as artworkId, al.id as locatedId, ag.id as generatedId, a.artwork_type as artworkTypeString, ag.cache_dir as cacheDir, ag.cache_filename as cacheFilename");
            sqlScalars.addToSql(" FROM season s, artwork a");
            sqlScalars.addToSql(SQL_LEFT_JOIN_ARTWORK_LOCATED);
            sqlScalars.addToSql(SQL_LEFT_JOIN_ARTWORK_GENERATED);
            sqlScalars.addToSql(" WHERE s.id=a.season_id");
            sqlScalars.addToSql(" AND s.id IN (:seasonlist)");
            sqlScalars.addToSql(SQL_ARTWORK_TYPE_IN_ARTWORKLIST);
        }

        if ((hasMovie || hasSeries || hasSeason) && hasEpisode) {
            sqlScalars.addToSql(" UNION");
        }

        if (hasEpisode) {
            sqlScalars.addToSql(
                    "SELECT 'EPISODE' as sourceString, v.id as sourceId, a.id as artworkId, al.id as locatedId, ag.id as generatedId, a.artwork_type as artworkTypeString, ag.cache_dir as cacheDir, ag.cache_filename as cacheFilename");
            sqlScalars.addToSql(" FROM videodata v, artwork a");
            sqlScalars.addToSql(SQL_LEFT_JOIN_ARTWORK_LOCATED);
            sqlScalars.addToSql(SQL_LEFT_JOIN_ARTWORK_GENERATED);
            sqlScalars.addToSql(" WHERE v.id=a.videodata_id");
            sqlScalars.addToSql(" AND v.episode>-1");
            sqlScalars.addToSql(" AND v.id IN (:episodelist)");
            sqlScalars.addToSql(SQL_ARTWORK_TYPE_IN_ARTWORKLIST);
        }

        sqlScalars.addScalar("sourceString", StringType.INSTANCE);
        sqlScalars.addScalar("sourceId", LongType.INSTANCE);
        sqlScalars.addScalar("artworkId", LongType.INSTANCE);
        sqlScalars.addScalar("locatedId", LongType.INSTANCE);
        sqlScalars.addScalar("generatedId", LongType.INSTANCE);
        sqlScalars.addScalar("artworkTypeString", StringType.INSTANCE);
        sqlScalars.addScalar(CACHE_DIR, StringType.INSTANCE);
        sqlScalars.addScalar(CACHE_FILENAME, StringType.INSTANCE);

        if (hasMovie) {
            sqlScalars.addParameter("movielist", ids.get(MetaDataType.MOVIE));
        }

        if (hasSeries) {
            sqlScalars.addParameter("serieslist", ids.get(MetaDataType.SERIES));
        }

        if (hasSeason) {
            sqlScalars.addParameter("seasonlist", ids.get(MetaDataType.SEASON));
        }

        if (hasEpisode) {
            sqlScalars.addParameter("episodelist", ids.get(MetaDataType.EPISODE));
        }

        sqlScalars.addParameter("artworklist", artworkRequired);

        List<ApiArtworkDTO> results = executeQueryWithTransform(ApiArtworkDTO.class, sqlScalars, null);

        LOG.trace("Found {} artworks", results.size());
        for (ApiArtworkDTO ia : results) {
            LOG.trace("  {} = {}", ia.key(), ia.toString());
            artworkList.get(ia.key()).addArtwork(ia);
        }
    }
}

From source file:org.yamj.core.database.dao.ApiDao.java

License:Open Source License

public List<ApiFilmographyDTO> retrieveFilmography(long id, SqlScalars sqlScalars) {
    sqlScalars.addScalar(TYPE_STRING, StringType.INSTANCE);
    sqlScalars.addScalar("job", StringType.INSTANCE);
    sqlScalars.addScalar("role", StringType.INSTANCE);
    sqlScalars.addScalar(TITLE, StringType.INSTANCE);
    sqlScalars.addScalar(ORIGINAL_TITLE, StringType.INSTANCE);
    sqlScalars.addScalar(YEAR, IntegerType.INSTANCE);
    sqlScalars.addScalar("yearEnd", IntegerType.INSTANCE);
    sqlScalars.addScalar("releaseDate", DateType.INSTANCE);
    sqlScalars.addScalar("releaseCountryCode", StringType.INSTANCE);
    sqlScalars.addScalar("description", StringType.INSTANCE);
    sqlScalars.addScalar("videoDataId", LongType.INSTANCE);
    sqlScalars.addScalar(SERIES_ID, LongType.INSTANCE);

    sqlScalars.addParameter(ID, id);//from   w  w w.j  a  v a  2 s . co  m

    return executeQueryWithTransform(ApiFilmographyDTO.class, sqlScalars, null);
}

From source file:org.yamj.core.database.dao.ApiDao.java

License:Open Source License

/**
 * Generates a list of people in a video
 *
 * @param metaDataType/*from  w  ww  .  j  a va  2  s.com*/
 * @param options
 * @return
 */
private static SqlScalars generateSqlForVideoPerson(MetaDataType metaDataType, OptionsId options) {
    SqlScalars sqlScalars = new SqlScalars();

    sqlScalars.addToSql("SELECT DISTINCT p.id,");
    if (options.hasDataItem(DataItem.BIOGRAPHY)) {
        sqlScalars.addToSql("p.biography,");
        sqlScalars.addScalar("biography", StringType.INSTANCE);
    }
    sqlScalars.addToSql("p.name,");
    sqlScalars.addToSql("p.first_name as firstName,");
    sqlScalars.addToSql("p.last_name as lastName,");
    sqlScalars.addToSql("p.birth_day AS birthDay,");
    sqlScalars.addToSql("p.birth_place AS birthPlace,");
    sqlScalars.addToSql("p.birth_name AS birthName,");
    sqlScalars.addToSql("p.death_day AS deathDay,");
    sqlScalars.addToSql("p.death_place AS deathPlace,");
    sqlScalars.addToSql("c.job as job,");
    sqlScalars.addToSql("c.role as role ");
    sqlScalars.addToSql("FROM person p ");

    if (metaDataType == MetaDataType.SERIES) {
        sqlScalars.addToSql("JOIN cast_crew c ON c.person_id=p.id ");
        sqlScalars.addToSql("JOIN videodata vd ON vd.id=c.videodata_id ");
        sqlScalars.addToSql("JOIN season sea ON sea.id=vd.season_id and sea.series_id=:id ");
    } else if (metaDataType == MetaDataType.SEASON) {
        sqlScalars.addToSql("JOIN cast_crew c ON c.person_id=p.id ");
        sqlScalars.addToSql("JOIN videodata vd ON vd.id=c.videodata_id and vd.season_id=:id ");
    } else {
        // defaults to movie/episode
        sqlScalars.addToSql("JOIN cast_crew c ON c.person_id=p.id and c.videodata_id=:id ");
    }

    sqlScalars.addToSql(" WHERE p.id=c.person_id ");

    if (MapUtils.isNotEmpty(options.splitJobs())) {
        sqlScalars.addToSql("AND c.job IN (:jobs)");
        sqlScalars.addParameter("jobs", options.getJobTypesAsSet());
    }

    // Add the search string
    sqlScalars.addToSql(options.getSearchString(Boolean.FALSE));
    // This will default to blank if there's no  required
    sqlScalars.addToSql(options.getSortString());

    // Add the ID
    sqlScalars.addParameter(ID, options.getId());

    sqlScalars.addScalar(ID, LongType.INSTANCE);
    sqlScalars.addScalar("name", StringType.INSTANCE);
    sqlScalars.addScalar("firstName", StringType.INSTANCE);
    sqlScalars.addScalar("lastName", StringType.INSTANCE);
    sqlScalars.addScalar("birthDay", DateType.INSTANCE);
    sqlScalars.addScalar("birthPlace", StringType.INSTANCE);
    sqlScalars.addScalar("birthName", StringType.INSTANCE);
    sqlScalars.addScalar("deathDay", DateType.INSTANCE);
    sqlScalars.addScalar("deathPlace", StringType.INSTANCE);
    sqlScalars.addScalar("job", StringType.INSTANCE);
    sqlScalars.addScalar("role", StringType.INSTANCE);

    LOG.debug("SQL ForVideoPerson: {}", sqlScalars.getSql());
    return sqlScalars;
}

From source file:org.yamj.core.database.dao.ApiDao.java

License:Open Source License

/**
 * Generate the SQL for the information about a person
 *
 * @param options//from w  w w. ja  v a  2 s.c om
 * @return
 */
private static SqlScalars generateSqlForPerson(OptionsId options) {
    SqlScalars sqlScalars = new SqlScalars();
    // Make sure to set the alias for the files for the Transformation into the class
    sqlScalars.addToSql("SELECT DISTINCT p.id,p.name,");
    if (options.hasDataItem(DataItem.BIOGRAPHY)) {
        sqlScalars.addToSql(" p.biography, ");
        sqlScalars.addScalar("biography", StringType.INSTANCE);
    }
    sqlScalars.addToSql("p.first_name AS firstName, ");
    sqlScalars.addToSql("p.last_name AS lastName, ");
    sqlScalars.addToSql("p.birth_day AS birthDay, ");
    sqlScalars.addToSql("p.birth_place AS birthPlace, ");
    sqlScalars.addToSql("p.birth_name AS birthName, ");
    sqlScalars.addToSql("p.death_day AS deathDay, ");
    sqlScalars.addToSql("p.death_place AS deathPlace ");
    sqlScalars.addToSql("FROM person p");

    if (options.getId() > 0L) {
        sqlScalars.addToSql(" WHERE id=:id");
        sqlScalars.addParameter(ID, options.getId());
    } else {
        if (MapUtils.isNotEmpty(options.splitJobs())) {
            sqlScalars.addToSql(", cast_crew c");
        }

        sqlScalars.addToSql(SQL_WHERE_1_EQ_1);

        if (MapUtils.isNotEmpty(options.splitJobs())) {
            sqlScalars.addToSql(" AND p.id=c.person_id");
            sqlScalars.addToSql(" AND c.job IN (:jobs)");
            sqlScalars.addParameter("jobs", options.getJobTypesAsSet());
        }

        // Add the search string
        sqlScalars.addToSql(options.getSearchString(Boolean.FALSE));
        // This will default to blank if there's no sort required
        sqlScalars.addToSql(options.getSortString());
    }

    sqlScalars.addScalar(ID, LongType.INSTANCE);
    sqlScalars.addScalar("name", StringType.INSTANCE);
    sqlScalars.addScalar("firstName", StringType.INSTANCE);
    sqlScalars.addScalar("lastName", StringType.INSTANCE);
    sqlScalars.addScalar("birthDay", DateType.INSTANCE);
    sqlScalars.addScalar("birthPlace", StringType.INSTANCE);
    sqlScalars.addScalar("birthName", StringType.INSTANCE);
    sqlScalars.addScalar("deathDay", DateType.INSTANCE);
    sqlScalars.addScalar("deathPlace", StringType.INSTANCE);

    return sqlScalars;
}

From source file:org.yamj.core.database.dao.ApiDao.java

License:Open Source License

private static SqlScalars getSqlArtwork(OptionsIndexArtwork options) {
    SqlScalars sqlScalars = new SqlScalars();

    sqlScalars.addToSql("SELECT a.id AS artworkId,");
    sqlScalars.addToSql(" al.id AS locatedId,");
    sqlScalars.addToSql(" ag.id AS generatedId,");
    sqlScalars.addToSql(" a.season_id AS seasonId,");
    sqlScalars.addToSql(" a.series_id AS seriesId,");
    sqlScalars.addToSql(" a.videodata_id AS videodataId,");
    sqlScalars.addToSql(" a.artwork_type AS artworkTypeString,");
    sqlScalars.addToSql(" ag.cache_filename AS cacheFilename,");
    sqlScalars.addToSql(" ag.cache_dir AS cacheDir");
    sqlScalars.addToSql(" FROM artwork a");
    sqlScalars.addToSql(SQL_LEFT_JOIN_ARTWORK_LOCATED);
    sqlScalars.addToSql(SQL_LEFT_JOIN_ARTWORK_GENERATED);
    sqlScalars.addToSql(SQL_WHERE_1_EQ_1); // Make appending restrictions easier
    if (options != null) {
        if (options.getId() > 0L) {
            sqlScalars.addToSql(" AND a.id=:id");
            sqlScalars.addParameter(ID, options.getId());
        }//from w  ww.j ava 2s. c o  m

        if (CollectionUtils.isNotEmpty(options.getArtwork())) {
            sqlScalars.addToSql(SQL_ARTWORK_TYPE_IN_ARTWORKLIST);
            sqlScalars.addParameter("artworklist", options.getArtwork());
        }

        if (CollectionUtils.isNotEmpty(options.getVideo())) {
            StringBuilder sb = new StringBuilder("AND (");
            boolean first = Boolean.TRUE;
            for (String type : options.getVideo()) {
                MetaDataType mdt = MetaDataType.fromString(type);
                if (first) {
                    first = Boolean.FALSE;
                } else {
                    sb.append(" OR");
                }
                if (mdt == MetaDataType.MOVIE) {
                    sb.append(" videodata_id IS NOT NULL");
                } else if (mdt == MetaDataType.SERIES) {
                    sb.append(" series_id IS NOT NULL");
                } else if (mdt == MetaDataType.SEASON) {
                    sb.append(" season_id IS NOT NULL");
                } else if (mdt == MetaDataType.PERSON) {
                    sb.append(" person_id IS NOT NULL");
                } else if (mdt == MetaDataType.BOXSET) {
                    sb.append(" boxedset_id IS NOT NULL");
                }
            }
            sb.append(")");
            sqlScalars.addToSql(sb.toString());
        }
    }

    // Add the scalars
    sqlScalars.addScalar("artworkId", LongType.INSTANCE);
    sqlScalars.addScalar("locatedId", LongType.INSTANCE);
    sqlScalars.addScalar("generatedId", LongType.INSTANCE);
    sqlScalars.addScalar(SEASON_ID, LongType.INSTANCE);
    sqlScalars.addScalar(SERIES_ID, LongType.INSTANCE);
    sqlScalars.addScalar("videodataId", LongType.INSTANCE);
    sqlScalars.addScalar("artworkTypeString", StringType.INSTANCE);
    sqlScalars.addScalar(CACHE_DIR, StringType.INSTANCE);
    sqlScalars.addScalar(CACHE_FILENAME, StringType.INSTANCE);

    return sqlScalars;
}

From source file:org.yamj.core.database.dao.ApiDao.java

License:Open Source License

public void getEpisodeList(ApiWrapperList<ApiEpisodeDTO> wrapper) {
    OptionsEpisode options = (OptionsEpisode) wrapper.getOptions();
    SqlScalars sqlScalars = new SqlScalars();

    sqlScalars.addToSql("SELECT ser.id AS seriesId, sea.id AS seasonId, sea.season, vid.episode, ");
    sqlScalars.addToSql(//from w w  w. java  2s .c o  m
            "vid.id, vid.title, vid.title_original as originalTitle, vid.release_date as firstAired, ");
    sqlScalars.addToSql("(vid.watched_nfo or vid.watched_file or vid.watched_api) as watched, ");
    if (options.hasDataItem(DataItem.PLOT)) {
        sqlScalars.addToSql("vid.plot, ");
        sqlScalars.addScalar("plot", StringType.INSTANCE);
    }
    if (options.hasDataItem(DataItem.OUTLINE)) {
        sqlScalars.addToSql("vid.outline, ");
        sqlScalars.addScalar("outline", StringType.INSTANCE);
    }
    sqlScalars.addToSql("ag.cache_filename AS cacheFilename, ag.cache_dir AS cacheDir");
    sqlScalars.addToSql("FROM season sea, series ser, videodata vid, artwork a");
    sqlScalars.addToSql(SQL_LEFT_JOIN_ARTWORK_LOCATED);
    sqlScalars.addToSql(SQL_LEFT_JOIN_ARTWORK_GENERATED);
    sqlScalars.addToSql("WHERE sea.series_id=ser.id");
    sqlScalars.addToSql("AND vid.season_id=sea.id");
    sqlScalars.addToSql("AND a.videodata_id=vid.id");

    if (options.getSeriesid() > 0L) {
        sqlScalars.addToSql("AND ser.id=:seriesid");
        sqlScalars.addParameter("seriesid", options.getSeriesid());
        if (options.getSeason() > 0L) {
            sqlScalars.addToSql("AND sea.season=:season");
            sqlScalars.addParameter(SEASON, options.getSeason());
        }
    }

    if (options.getSeasonid() > 0L) {
        sqlScalars.addToSql("AND sea.id=:seasonid");
        sqlScalars.addParameter("seasonid", options.getSeasonid());
    }

    if (options.getWatched() != null && options.getWatched()) {
        sqlScalars.addToSql(" AND (vid.watched_nfo=1 or vid.watched_file=1 or vid.watched_api=1)");
    } else if (options.getWatched() != null && !options.getWatched()) {
        sqlScalars.addToSql(" AND vid.watched_nfo=0 AND vid.watched_file=0 AND vid.watched_api=0");
    }

    sqlScalars.addToSql(" ORDER BY seriesId, season, episode");
    LOG.debug("getEpisodeList SQL: {}", sqlScalars.getSql());

    sqlScalars.addScalar(ID, LongType.INSTANCE);
    sqlScalars.addScalar(SERIES_ID, LongType.INSTANCE);
    sqlScalars.addScalar(SEASON_ID, LongType.INSTANCE);
    sqlScalars.addScalar(SEASON, LongType.INSTANCE);
    sqlScalars.addScalar(EPISODE, LongType.INSTANCE);
    sqlScalars.addScalar(TITLE, StringType.INSTANCE);
    sqlScalars.addScalar(ORIGINAL_TITLE, StringType.INSTANCE);
    sqlScalars.addScalar(CACHE_FILENAME, StringType.INSTANCE);
    sqlScalars.addScalar(CACHE_DIR, StringType.INSTANCE);
    sqlScalars.addScalar("firstAired", DateType.INSTANCE);
    sqlScalars.addScalar(WATCHED, BooleanType.INSTANCE);

    List<ApiEpisodeDTO> results = executeQueryWithTransform(ApiEpisodeDTO.class, sqlScalars, wrapper);
    if (CollectionUtils.isNotEmpty(results)) {
        if (options.hasDataItem(DataItem.FILES)) {
            for (ApiEpisodeDTO episode : results) {
                episode.setFiles(getFilesForId(MetaDataType.EPISODE, episode.getId()));
            }
        }
        if (options.hasDataItem(DataItem.GENRE)) {
            // use series genres
            Map<Long, List<ApiGenreDTO>> map = new HashMap<>();
            for (ApiEpisodeDTO episode : results) {
                List<ApiGenreDTO> genres = map.get(episode.getSeriesId());
                if (genres == null) {
                    genres = getGenresForId(MetaDataType.SERIES, episode.getSeriesId());
                    map.put(episode.getSeriesId(), genres);
                }
                episode.setGenres(genres);
            }
        }
        if (options.hasDataItem(DataItem.COUNTRY)) {
            // use series countries
            Map<Long, List<ApiCountryDTO>> map = new HashMap<>();
            for (ApiEpisodeDTO episode : results) {
                List<ApiCountryDTO> countries = map.get(episode.getSeriesId());
                if (countries == null) {
                    countries = getCountriesForId(MetaDataType.SERIES, episode.getSeriesId());
                    map.put(episode.getSeriesId(), countries);
                }
                episode.setCountries(countries);
            }
        }
        if (options.hasDataItem(DataItem.STUDIO)) {
            // use series studios
            Map<Long, List<Studio>> map = new HashMap<>();
            for (ApiEpisodeDTO episode : results) {
                List<Studio> studios = map.get(episode.getSeriesId());
                if (studios == null) {
                    studios = getStudiosForId(MetaDataType.SERIES, episode.getSeriesId());
                    map.put(episode.getSeriesId(), studios);
                }
                episode.setStudios(studios);
            }
        }
        if (options.hasDataItem(DataItem.CERTIFICATION)) {
            // use series certifications
            Map<Long, List<ApiCertificationDTO>> map = new HashMap<>();
            for (ApiEpisodeDTO episode : results) {
                List<ApiCertificationDTO> certifications = map.get(episode.getSeriesId());
                if (certifications == null) {
                    certifications = getCertificationsForId(MetaDataType.SERIES, episode.getSeriesId());
                    map.put(episode.getSeriesId(), certifications);
                }
                episode.setCertifications(certifications);
            }
        }
        if (options.hasDataItem(DataItem.AWARD)) {
            // use series awards
            Map<Long, List<ApiAwardDTO>> map = new HashMap<>();
            for (ApiEpisodeDTO episode : results) {
                List<ApiAwardDTO> awards = map.get(episode.getSeriesId());
                if (awards == null) {
                    awards = getAwardsForId(MetaDataType.SERIES, episode.getSeriesId());
                    map.put(episode.getSeriesId(), awards);
                }
                episode.setAwards(awards);
            }
        }
        if (options.hasDataItem(DataItem.RATING)) {
            // use episode certifications
            for (ApiEpisodeDTO episode : results) {
                episode.setRatings(getRatingsForId(MetaDataType.EPISODE, episode.getId()));
            }
        }

        if (MapUtils.isNotEmpty(options.splitJobs())) {
            Set<String> jobs = options.getJobTypesAsSet();

            for (ApiEpisodeDTO episode : results) {
                List<ApiPersonDTO> cast = getCastForId(MetaDataType.EPISODE, episode.getId(),
                        options.splitDataItems(), jobs);

                // just add given amount for jobs to cast
                Map<JobType, Integer> jobMap = new HashMap<>(options.splitJobs());
                for (ApiPersonDTO entry : cast) {
                    Integer amount = jobMap.get(entry.getJobType());
                    if (amount == null) {
                        episode.addCast(entry);
                    } else if (amount > 0) {
                        episode.addCast(entry);
                        amount--;
                        jobMap.put(entry.getJobType(), amount);
                    }
                }
            }
        } else if (options.isAllJobTypes()) {
            for (ApiEpisodeDTO episode : results) {
                episode.setCast(
                        getCastForId(MetaDataType.EPISODE, episode.getId(), options.splitDataItems(), null));
            }
        }
    }
    wrapper.setResults(results);
}

From source file:org.yamj.core.database.dao.ApiDao.java

License:Open Source License

public void getSingleVideo(ApiWrapperSingle<ApiVideoDTO> wrapper) {
    OptionsIndexVideo options = (OptionsIndexVideo) wrapper.getOptions();
    IndexParams params = new IndexParams(options);
    MetaDataType type = MetaDataType.fromString(options.getType());

    if (CollectionUtils.isNotEmpty(params.getDataItems())) {
        LOG.trace("Getting additional data items: {} ", params.getDataItems());
    }/*from   www .  java 2 s .  c o m*/

    String sql;
    if (type == MetaDataType.MOVIE) {
        sql = generateSqlForVideo(true, params);
    } else if (type == MetaDataType.SERIES) {
        sql = generateSqlForSeries(params);
    } else if (type == MetaDataType.SEASON) {
        sql = generateSqlForSeason(params);
    } else {
        throw new UnsupportedOperationException(
                "Unable to process type '" + type + "' (Original: '" + options.getType() + "')");
    }
    LOG.trace("SQL for {}-{}: {}", type, params.getId(), sql);

    SqlScalars sqlScalars = new SqlScalars(sql);

    sqlScalars.addScalar(ID, LongType.INSTANCE);
    sqlScalars.addScalar("videoTypeString", StringType.INSTANCE);
    sqlScalars.addScalar(TITLE, StringType.INSTANCE);
    sqlScalars.addScalar(ORIGINAL_TITLE, StringType.INSTANCE);
    sqlScalars.addScalar(VIDEO_YEAR, IntegerType.INSTANCE);
    sqlScalars.addScalar(SERIES_ID, LongType.INSTANCE);
    sqlScalars.addScalar(SEASON_ID, LongType.INSTANCE);
    sqlScalars.addScalar(SEASON, LongType.INSTANCE);
    sqlScalars.addScalar(WATCHED, BooleanType.INSTANCE);
    // add Scalars for additional data item columns
    DataItemTools.addDataItemScalars(sqlScalars, params.getDataItems());
    // add additional parameters
    params.addScalarParameters(sqlScalars);

    List<ApiVideoDTO> queryResults = executeQueryWithTransform(ApiVideoDTO.class, sqlScalars, wrapper);
    LOG.trace("Found {} results for ID {}", queryResults.size(), params.getId());
    if (CollectionUtils.isNotEmpty(queryResults)) {
        ApiVideoDTO video = queryResults.get(0);

        if (params.hasDataItem(DataItem.GENRE)) {
            LOG.trace("Adding genres for ID {}", options.getId());
            video.setGenres(getGenresForId(type, options.getId()));
        }

        if (params.hasDataItem(DataItem.STUDIO)) {
            LOG.trace("Adding studios for ID {}", options.getId());
            video.setStudios(getStudiosForId(type, options.getId()));
        }

        if (options.hasDataItem(DataItem.COUNTRY)) {
            LOG.trace("Adding countries for ID {}", options.getId());
            video.setCountries(getCountriesForId(type, options.getId()));
        }

        if (params.hasDataItem(DataItem.CERTIFICATION)) {
            LOG.trace("Adding certifications for ID {}", options.getId());
            video.setCertifications(getCertificationsForId(type, options.getId()));
        }

        if (params.hasDataItem(DataItem.RATING)) {
            LOG.trace("Adding ratings for ID {}", options.getId());
            video.setRatings(getRatingsForId(type, options.getId()));
        }

        if (options.hasDataItem(DataItem.AWARD)) {
            LOG.trace("Adding awards for ID {}", options.getId());
            video.setAwards(getAwardsForId(type, options.getId()));
        }

        if (options.hasDataItem(DataItem.EXTERNALID)) {
            LOG.trace("Adding external IDs for ID {}", options.getId());
            video.setExternalIds(getExternalIdsForId(type, options.getId()));
        }

        if (options.hasDataItem(DataItem.BOXSET)) {
            LOG.trace("Adding boxed sets for ID {}", options.getId());
            video.setBoxedSets(getBoxedSetsForId(type, options.getId()));
        }

        if (params.hasDataItem(DataItem.ARTWORK)) {
            LOG.trace("Adding artwork for ID {}", options.getId());
            Map<Long, List<ApiArtworkDTO>> artworkList;
            if (CollectionUtils.isNotEmpty(options.getArtworkTypes())) {
                artworkList = getArtworkForId(type, options.getId(), options.getArtworkTypes());
            } else {
                artworkList = getArtworkForId(type, options.getId());
            }

            if (artworkList.containsKey(options.getId())) {
                video.setArtwork(artworkList.get(options.getId()));
            }
        }

        if (params.hasDataItem(DataItem.FILES)) {
            LOG.trace("Adding files for ID {}", options.getId());
            video.setFiles(getFilesForId(type, options.getId()));
        }

        if (params.hasDataItem(DataItem.TRAILER)) {
            LOG.trace("Adding trailers for ID {}", options.getId());
            video.setTrailers(getTrailersForId(type, options.getId()));
        }

        if (MapUtils.isNotEmpty(options.splitJobs())) {
            Set<String> jobs = options.getJobTypesAsSet();
            LOG.trace("Adding jobs for ID {}: {}", options.getId(), jobs);

            List<ApiPersonDTO> cast = getCastForId(type, options.getId(), options.splitDataItems(), jobs);

            // just add given amount for jobs to cast
            Map<JobType, Integer> jobMap = new HashMap<>(options.splitJobs());
            for (ApiPersonDTO entry : cast) {
                Integer amount = jobMap.get(entry.getJobType());
                if (amount == null) {
                    video.addCast(entry);
                } else if (amount > 0) {
                    video.addCast(entry);
                    amount--;
                    jobMap.put(entry.getJobType(), amount);
                }
            }
        } else if (options.isAllJobTypes()) {
            LOG.trace("Adding all jobs for ID {}", options.getId());
            video.setCast(getCastForId(type, options.getId(), params.getDataItems(), null));
        }

        wrapper.setResult(video);
    } else {
        wrapper.setResult(null);
    }
    wrapper.setStatusCheck();
}