added the category reference table and some support code to manage it
This commit is contained in:
parent
6cf37bfee2
commit
0ffd03e38b
|
@ -165,6 +165,10 @@
|
|||
|
||||
<object name="venice-auditor" classname="com.silverwrist.venice.app.StartupShutdownAuditor" priority="100"/>
|
||||
|
||||
<object name="categories" classname="com.silverwrist.venice.community.CategoryManager" priority="100"/>
|
||||
<database connection="data"/>
|
||||
</object>
|
||||
|
||||
<!-- Additional objects for SourceID interface -->
|
||||
|
||||
<object name="sso" classname="com.silverwrist.venice.sourceid.FederationManagerObject" priority="20">
|
||||
|
|
|
@ -164,6 +164,10 @@
|
|||
|
||||
<object name="venice-auditor" classname="com.silverwrist.venice.app.StartupShutdownAuditor" priority="100"/>
|
||||
|
||||
<object name="categories" classname="com.silverwrist.venice.community.CategoryManager" priority="100"/>
|
||||
<database connection="data"/>
|
||||
</object>
|
||||
|
||||
<!-- The Venice application layer -->
|
||||
<application name="venice" classname="com.silverwrist.venice.app.VeniceApplication">
|
||||
<stylesheet-mappings>
|
||||
|
|
|
@ -253,6 +253,16 @@ CREATE TABLE menuitems (
|
|||
PRIMARY KEY (menuid, sequence)
|
||||
);
|
||||
|
||||
# The table mapping category IDs to category names.
|
||||
CREATE TABLE refcategory (
|
||||
catid INT NOT NULL PRIMARY KEY,
|
||||
parent INT NOT NULL,
|
||||
symlink INT NOT NULL,
|
||||
name VARCHAR(64) NOT NULL,
|
||||
dontuse TINYINT DEFAULT 0,
|
||||
UNIQUE INDEX display (parent, name)
|
||||
);
|
||||
|
||||
##############################################################################
|
||||
# Set table access rights
|
||||
##############################################################################
|
||||
|
@ -569,6 +579,378 @@ INSERT INTO imagetype (typecode, nsid, name) VALUES
|
|||
|
||||
#### following this line is initialization of Venice-specific tables ####
|
||||
|
||||
# Populate the Category table.
|
||||
# Source: Mozilla Open Directory Project categorization system <http://dmoz.org>;
|
||||
# additional categorization from WebbMe categories
|
||||
INSERT INTO refcategory (catid, parent, symlink, name) VALUES
|
||||
(0, -1, -1, 'Unclassified'),
|
||||
(1, -1, -1, 'Arts'),
|
||||
(16, 1, -1, 'Animation'),
|
||||
(17, 1, 181, 'Antiques'),
|
||||
(18, 1, -1, 'Architecture'),
|
||||
(19, 1, -1, 'Art History'),
|
||||
(20, 1, -1, 'Body Art'),
|
||||
(21, 1, -1, 'Celebrities'),
|
||||
(22, 1, -1, 'Comics'),
|
||||
(23, 1, -1, 'Crafts'),
|
||||
(24, 1, -1, 'Dance'),
|
||||
(25, 1, -1, 'Design'),
|
||||
(26, 1, -1, 'Education'),
|
||||
(27, 1, -1, 'Entertainment'),
|
||||
(28, 1, -1, 'Graphic Design'),
|
||||
(29, 1, -1, 'Humanities'),
|
||||
(30, 1, -1, 'Illustration'),
|
||||
(31, 1, -1, 'Literature'),
|
||||
(32, 1, -1, 'Movies'),
|
||||
(33, 1, -1, 'Music'),
|
||||
(34, 1, -1, 'Myths and Folktales'),
|
||||
(35, 1, -1, 'Native and Tribal'),
|
||||
(36, 1, -1, 'Performing Arts'),
|
||||
(37, 1, -1, 'Photography'),
|
||||
(38, 1, -1, 'Radio'),
|
||||
(39, 1, -1, 'Television'),
|
||||
(40, 1, -1, 'Theatre'),
|
||||
(41, 1, -1, 'Typography'),
|
||||
(42, 1, -1, 'Video'),
|
||||
(43, 1, -1, 'Visual Arts'),
|
||||
(44, 1, -1, 'Writing'),
|
||||
(2, -1, -1, 'Business'),
|
||||
(45, 2, -1, 'Accounting'),
|
||||
(46, 2, -1, 'Advertising'),
|
||||
(47, 2, -1, 'Aerospace'),
|
||||
(48, 2, -1, 'Agriculture and Forestry'),
|
||||
(49, 2, -1, 'Apparel'),
|
||||
(50, 2, -1, 'Arts and Entertainment'),
|
||||
(51, 2, -1, 'Associations'),
|
||||
(52, 2, -1, 'Aviation'),
|
||||
(53, 2, -1, 'Business Services'),
|
||||
(54, 2, 245, 'Classifieds'),
|
||||
(55, 2, -1, 'Computers'),
|
||||
(56, 2, -1, 'Consulting'),
|
||||
(57, 2, -1, 'Construction and Maintenance'),
|
||||
(58, 2, -1, 'Electronics'),
|
||||
(59, 2, -1, 'Employment'),
|
||||
(60, 2, -1, 'Energy and Utilities'),
|
||||
(61, 2, -1, 'Environmental and Safety'),
|
||||
(62, 2, -1, 'Financial Services'),
|
||||
(63, 2, -1, 'Food and Related Products'),
|
||||
(64, 2, -1, 'Insurance'),
|
||||
(65, 2, -1, 'Internet Services'),
|
||||
(66, 2, -1, 'Investing'),
|
||||
(67, 2, 290, 'Law'),
|
||||
(68, 2, -1, 'Management'),
|
||||
(69, 2, -1, 'Manufacturing'),
|
||||
(70, 2, -1, 'Marketing'),
|
||||
(71, 2, -1, 'Mining and Drilling'),
|
||||
(72, 2, -1, 'Printing'),
|
||||
(73, 2, -1, 'Publishing'),
|
||||
(74, 2, -1, 'Real Estate'),
|
||||
(75, 2, -1, 'Retail'),
|
||||
(76, 2, -1, 'Security'),
|
||||
(77, 2, -1, 'Small Business'),
|
||||
(78, 2, -1, 'Taxes'),
|
||||
(79, 2, -1, 'Training and Schools'),
|
||||
(80, 2, -1, 'Telecommunications'),
|
||||
(81, 2, -1, 'Transportation'),
|
||||
(82, 2, -1, 'Venture Capital'),
|
||||
(3, -1, -1, 'Computers'),
|
||||
(83, 3, -1, 'CAD'),
|
||||
(84, 3, -1, 'Computer Science'),
|
||||
(85, 3, -1, 'Consultants'),
|
||||
(86, 3, -1, 'Data Communications'),
|
||||
(87, 3, -1, 'Desktop Publishing'),
|
||||
(88, 3, -1, 'Education'),
|
||||
(89, 3, -1, 'Ethics'),
|
||||
(90, 3, -1, 'Fonts'),
|
||||
(91, 3, 124, 'Games'),
|
||||
(92, 3, -1, 'Graphics'),
|
||||
(93, 3, -1, 'Hacking'),
|
||||
(94, 3, -1, 'Hardware'),
|
||||
(95, 3, -1, 'History'),
|
||||
(96, 3, -1, 'Internet'),
|
||||
(97, 3, -1, 'Multimedia'),
|
||||
(98, 3, -1, 'Open Source'),
|
||||
(99, 3, -1, 'Operating Systems'),
|
||||
(100, 3, -1, 'Programming'),
|
||||
(101, 3, -1, 'Robotics'),
|
||||
(102, 3, -1, 'Security'),
|
||||
(103, 3, -1, 'Shopping'),
|
||||
(104, 3, -1, 'Software'),
|
||||
(105, 3, -1, 'Systems'),
|
||||
(4, -1, -1, 'Games'),
|
||||
(106, 4, -1, 'Board Games'),
|
||||
(107, 4, -1, 'Card Games'),
|
||||
(108, 4, -1, 'Coin-op Games'),
|
||||
(109, 4, 123, 'Collectible Card Games'),
|
||||
(110, 4, -1, 'Dice Games'),
|
||||
(111, 4, 319, 'Fantasy Sports'),
|
||||
(112, 4, -1, 'Gambling'),
|
||||
(113, 4, -1, 'Game Creation Systems'),
|
||||
(114, 4, -1, 'Game Design'),
|
||||
(115, 4, -1, 'Hand Games'),
|
||||
(116, 4, -1, 'Internet Games'),
|
||||
(117, 4, -1, 'Party Games'),
|
||||
(118, 4, -1, 'Puzzles'),
|
||||
(119, 4, 270, 'Retailers'),
|
||||
(120, 4, -1, 'Roleplaying Games'),
|
||||
(121, 4, 14, 'Sports'),
|
||||
(122, 4, -1, 'Tile Games'),
|
||||
(123, 4, -1, 'Trading Cards'),
|
||||
(124, 4, -1, 'Video Games'),
|
||||
(125, 4, -1, 'Yard and Deck Games'),
|
||||
(5, -1, -1, 'Health'),
|
||||
(126, 5, -1, 'Aging'),
|
||||
(127, 5, -1, 'Alternative Medicine'),
|
||||
(128, 5, -1, 'Beauty'),
|
||||
(129, 5, -1, 'Children''s Health'),
|
||||
(130, 5, -1, 'Conditions and Diseases'),
|
||||
(131, 5, -1, 'Dentistry'),
|
||||
(132, 5, 280, 'Disabilities'),
|
||||
(133, 5, -1, 'Education'),
|
||||
(134, 5, -1, 'Fitness'),
|
||||
(135, 5, 64, 'Health Insurance'),
|
||||
(136, 5, -1, 'Medicine'),
|
||||
(137, 5, -1, 'Men''s Health'),
|
||||
(138, 5, -1, 'Mental Health'),
|
||||
(139, 5, -1, 'Nursing'),
|
||||
(140, 5, -1, 'Nutrition'),
|
||||
(141, 5, -1, 'Occupational Health and Safety'),
|
||||
(142, 5, -1, 'Pharmacy'),
|
||||
(143, 5, -1, 'Public Health and Safety'),
|
||||
(144, 5, -1, 'Reproductive Health'),
|
||||
(145, 5, -1, 'Seniors'' Health'),
|
||||
(146, 5, -1, 'Services'),
|
||||
(147, 5, -1, 'Substance Abuse'),
|
||||
(148, 5, -1, 'Teen Health'),
|
||||
(149, 5, -1, 'Women''s Health'),
|
||||
(6, -1, -1, 'Home'),
|
||||
(150, 6, -1, 'Apartment Living'),
|
||||
(151, 6, -1, 'Cooking'),
|
||||
(152, 6, -1, 'Do-It-Yourself'),
|
||||
(153, 6, -1, 'Emergency Preparation'),
|
||||
(154, 6, -1, 'Entertaining'),
|
||||
(155, 6, -1, 'Family'),
|
||||
(156, 6, -1, 'Gardens'),
|
||||
(157, 6, -1, 'Home Improvement'),
|
||||
(158, 6, -1, 'Homemaking'),
|
||||
(363, 6, -1, 'Homeowners'),
|
||||
(159, 6, -1, 'Kids'),
|
||||
(160, 6, -1, 'Moving and Relocating'),
|
||||
(161, 6, -1, 'Nursery'),
|
||||
(162, 6, 207, 'Pets'),
|
||||
(163, 6, -1, 'Personal Finance'),
|
||||
(164, 6, -1, 'Personal Organization'),
|
||||
(165, 6, -1, 'Relatives'),
|
||||
(166, 6, -1, 'Rural Living'),
|
||||
(167, 6, 12, 'Shopping'),
|
||||
(168, 6, -1, 'Urban Living'),
|
||||
(7, -1, -1, 'News'),
|
||||
(169, 7, -1, 'Alternative Media'),
|
||||
(170, 7, -1, 'Columnists'),
|
||||
(171, 7, -1, 'Current Events'),
|
||||
(172, 7, -1, 'Magazines'),
|
||||
(173, 7, -1, 'Media'),
|
||||
(174, 7, -1, 'Newspapers'),
|
||||
(175, 7, -1, 'Online'),
|
||||
(176, 7, -1, 'Politics'),
|
||||
(177, 7, -1, 'Satire'),
|
||||
(178, 7, -1, 'Weather'),
|
||||
(8, -1, -1, 'Recreation'),
|
||||
(179, 8, -1, 'Air Hockey'),
|
||||
(180, 8, -1, 'Amateur Radio'),
|
||||
(181, 8, -1, 'Antiques'),
|
||||
(182, 8, -1, 'Audio'),
|
||||
(183, 8, -1, 'Aviation'),
|
||||
(184, 8, -1, 'Birdwatching'),
|
||||
(185, 8, -1, 'Boating'),
|
||||
(186, 8, 310, 'Bowling'),
|
||||
(187, 8, -1, 'Climbing'),
|
||||
(188, 8, -1, 'Collecting'),
|
||||
(189, 8, 23, 'Crafts'),
|
||||
(190, 8, -1, 'Drugs'),
|
||||
(191, 8, -1, 'Food and Drink'),
|
||||
(192, 8, 4, 'Games'),
|
||||
(193, 8, 156, 'Gardens'),
|
||||
(194, 8, 285, 'Genealogy'),
|
||||
(195, 8, -1, 'Guns'),
|
||||
(196, 8, -1, 'Hot Air Ballooning'),
|
||||
(197, 8, -1, 'Humor'),
|
||||
(198, 8, -1, 'Kites'),
|
||||
(199, 8, -1, 'Knives'),
|
||||
(200, 8, -1, 'Living History'),
|
||||
(201, 8, 332, 'Martial Arts'),
|
||||
(202, 8, -1, 'Models'),
|
||||
(203, 8, -1, 'Motorcycles'),
|
||||
(204, 8, -1, 'Nudism'),
|
||||
(205, 8, -1, 'Outdoors'),
|
||||
(206, 8, -1, 'Parties'),
|
||||
(207, 8, -1, 'Pets'),
|
||||
(208, 8, -1, 'Roads and Highways'),
|
||||
(209, 8, -1, 'Scouting'),
|
||||
(210, 8, -1, 'Smoking'),
|
||||
(211, 8, 14, 'Sports'),
|
||||
(212, 8, -1, 'Theme Parks'),
|
||||
(213, 8, -1, 'Trains and Railroads'),
|
||||
(214, 8, -1, 'Travel'),
|
||||
(9, -1, -1, 'Reference and Education'),
|
||||
(215, 9, -1, 'Alumni'),
|
||||
(216, 9, -1, 'Colleges and Universities'),
|
||||
(217, 9, -1, 'Continuing Education'),
|
||||
(218, 9, 79, 'Corporate Training'),
|
||||
(219, 9, -1, 'Distance Learning'),
|
||||
(220, 9, -1, 'International'),
|
||||
(221, 9, -1, 'K through 12'),
|
||||
(222, 9, -1, 'Libraries'),
|
||||
(223, 9, -1, 'Museums'),
|
||||
(224, 9, -1, 'Special Education'),
|
||||
(225, 9, -1, 'Vocational Education'),
|
||||
(10, -1, -1, 'Regional'),
|
||||
(226, 10, -1, 'International'),
|
||||
(227, 10, -1, 'US'),
|
||||
(11, -1, -1, 'Science'),
|
||||
(228, 11, -1, 'Agriculture'),
|
||||
(229, 11, -1, 'Alternative Science'),
|
||||
(230, 11, -1, 'Astronomy'),
|
||||
(231, 11, -1, 'Biology'),
|
||||
(232, 11, -1, 'Chemistry'),
|
||||
(233, 11, -1, 'Earth Sciences'),
|
||||
(234, 11, -1, 'Environment'),
|
||||
(235, 11, -1, 'Mathematics'),
|
||||
(236, 11, -1, 'Physics'),
|
||||
(237, 11, -1, 'Science in Society'),
|
||||
(238, 11, -1, 'Social Sciences'),
|
||||
(239, 11, -1, 'Space'),
|
||||
(240, 11, -1, 'Technology'),
|
||||
(12, -1, -1, 'Shopping'),
|
||||
(241, 12, -1, 'Antiques and Collectibles'),
|
||||
(242, 12, -1, 'Auctions'),
|
||||
(243, 12, -1, 'Books'),
|
||||
(244, 12, -1, 'Children'),
|
||||
(245, 12, -1, 'Classifieds'),
|
||||
(246, 12, -1, 'Clothing'),
|
||||
(247, 12, 103, 'Computers'),
|
||||
(248, 12, -1, 'Consumer Electronics'),
|
||||
(249, 12, -1, 'Crafts'),
|
||||
(250, 12, -1, 'Entertainment'),
|
||||
(251, 12, -1, 'Ethnic and Regional'),
|
||||
(252, 12, -1, 'Flowers'),
|
||||
(253, 12, -1, 'Food and Drink'),
|
||||
(254, 12, -1, 'Furniture'),
|
||||
(255, 12, -1, 'Gifts'),
|
||||
(256, 12, -1, 'Health and Beauty'),
|
||||
(257, 12, -1, 'Holidays'),
|
||||
(258, 12, -1, 'Home and Garden'),
|
||||
(259, 12, -1, 'Jewelry'),
|
||||
(260, 12, -1, 'Music and Video'),
|
||||
(261, 12, -1, 'Niche'),
|
||||
(262, 12, -1, 'Office Products'),
|
||||
(263, 12, -1, 'Pets'),
|
||||
(264, 12, -1, 'Photography'),
|
||||
(265, 12, -1, 'Recreation and Hobbies'),
|
||||
(266, 12, -1, 'Religious'),
|
||||
(267, 12, -1, 'Sports'),
|
||||
(268, 12, -1, 'Tobacco'),
|
||||
(269, 12, -1, 'Tools'),
|
||||
(270, 12, -1, 'Toys and Games'),
|
||||
(271, 12, -1, 'Travel'),
|
||||
(272, 12, -1, 'Vehicles'),
|
||||
(273, 12, -1, 'Visual Arts'),
|
||||
(274, 12, -1, 'Weddings'),
|
||||
(275, 12, -1, 'Wholesale'),
|
||||
(13, -1, -1, 'Society'),
|
||||
(276, 13, -1, 'Activism'),
|
||||
(277, 13, -1, 'Advice'),
|
||||
(278, 13, -1, 'Crime'),
|
||||
(279, 13, -1, 'Death'),
|
||||
(280, 13, -1, 'Disabled'),
|
||||
(281, 13, -1, 'Ethnicity'),
|
||||
(282, 13, -1, 'Folklore'),
|
||||
(283, 13, -1, 'Future'),
|
||||
(284, 13, -1, 'Gay/Lesbian/Bisexual'),
|
||||
(285, 13, -1, 'Genealogy'),
|
||||
(286, 13, -1, 'Government'),
|
||||
(287, 13, -1, 'History'),
|
||||
(288, 13, -1, 'Holidays'),
|
||||
(289, 13, -1, 'Issues'),
|
||||
(290, 13, -1, 'Law'),
|
||||
(291, 13, -1, 'Lifestyle Choices'),
|
||||
(292, 13, -1, 'Military'),
|
||||
(293, 13, -1, 'Paranormal'),
|
||||
(294, 13, -1, 'People'),
|
||||
(295, 13, -1, 'Philosophy'),
|
||||
(296, 13, -1, 'Politics'),
|
||||
(297, 13, -1, 'Recovery and Support Groups'),
|
||||
(298, 13, -1, 'Relationships'),
|
||||
(299, 13, -1, 'Religion and Spirituality'),
|
||||
(300, 13, -1, 'Sexuality'),
|
||||
(301, 13, -1, 'Subcultures'),
|
||||
(302, 13, -1, 'Transgendered'),
|
||||
(303, 13, -1, 'Work'),
|
||||
(14, -1, -1, 'Sports'),
|
||||
(304, 14, -1, 'Archery'),
|
||||
(305, 14, -1, 'Badminton'),
|
||||
(306, 14, -1, 'Baseball'),
|
||||
(307, 14, -1, 'Basketball'),
|
||||
(308, 14, -1, 'Billiards'),
|
||||
(309, 14, -1, 'Boomerang'),
|
||||
(310, 14, -1, 'Bowling'),
|
||||
(311, 14, -1, 'Boxing'),
|
||||
(312, 14, -1, 'Cheerleading'),
|
||||
(313, 14, -1, 'Cricket'),
|
||||
(314, 14, -1, 'Croquet'),
|
||||
(315, 14, -1, 'Cycling'),
|
||||
(316, 14, -1, 'Darts'),
|
||||
(317, 14, -1, 'Equestrian'),
|
||||
(318, 14, -1, 'Extreme Sports'),
|
||||
(319, 14, -1, 'Fantasy'),
|
||||
(320, 14, -1, 'Fencing'),
|
||||
(321, 14, -1, 'Fishing'),
|
||||
(322, 14, -1, 'Flying Discs'),
|
||||
(323, 14, -1, 'Football'),
|
||||
(324, 14, -1, 'Golf'),
|
||||
(325, 14, -1, 'Greyhound Racing'),
|
||||
(326, 14, -1, 'Gymnastics'),
|
||||
(327, 14, -1, 'Handball'),
|
||||
(328, 14, -1, 'Hockey'),
|
||||
(329, 14, -1, 'Lacrosse'),
|
||||
(330, 14, -1, 'Laser Games'),
|
||||
(331, 14, -1, 'Lumberjack'),
|
||||
(332, 14, -1, 'Martial Arts'),
|
||||
(333, 14, -1, 'Motor Sports'),
|
||||
(334, 14, -1, 'Orienteering'),
|
||||
(335, 14, -1, 'Paintball'),
|
||||
(336, 14, -1, 'Racquetball'),
|
||||
(337, 14, -1, 'Rodeo'),
|
||||
(338, 14, -1, 'Roller Derby'),
|
||||
(339, 14, -1, 'Rope Skipping'),
|
||||
(340, 14, -1, 'Rugby'),
|
||||
(341, 14, -1, 'Running'),
|
||||
(342, 14, -1, 'Sailing'),
|
||||
(343, 14, -1, 'Shooting'),
|
||||
(344, 14, 267, 'Shopping'),
|
||||
(345, 14, -1, 'Skateboarding'),
|
||||
(346, 14, -1, 'Skating'),
|
||||
(347, 14, -1, 'Skiing'),
|
||||
(348, 14, -1, 'Sledding'),
|
||||
(349, 14, -1, 'Sled Dog Racing'),
|
||||
(350, 14, -1, 'Snowboarding'),
|
||||
(351, 14, -1, 'Soccer'),
|
||||
(352, 14, -1, 'Softball'),
|
||||
(353, 14, -1, 'Squash'),
|
||||
(354, 14, -1, 'Strength Sports'),
|
||||
(355, 14, -1, 'Table Tennis'),
|
||||
(356, 14, -1, 'Tennis'),
|
||||
(357, 14, -1, 'Track and Field'),
|
||||
(358, 14, -1, 'Volleyball'),
|
||||
(359, 14, -1, 'Walking'),
|
||||
(360, 14, -1, 'Water Sports'),
|
||||
(361, 14, -1, 'Winter Sports'),
|
||||
(362, 14, -1, 'Wrestling'),
|
||||
(15, -1, -1, '***DEPRECATED***');
|
||||
### -- LAST IS 363 -- ###
|
||||
|
||||
UPDATE refcategory SET dontuse = 1 WHERE catid = 15;
|
||||
|
||||
# Create the "global" menu. (ID #1)
|
||||
INSERT INTO menus (menuid, menu_nsid, menu_name, title, subtitle)
|
||||
VALUES (1, 1, 'fixed.menu', 'About This Site', NULL);
|
||||
|
|
74
src/venice-base/com/silverwrist/venice/SearchMode.java
Normal file
74
src/venice-base/com/silverwrist/venice/SearchMode.java
Normal file
|
@ -0,0 +1,74 @@
|
|||
/*
|
||||
* The contents of this file are subject to the Mozilla Public License Version 1.1
|
||||
* (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.mozilla.org/MPL/>.
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
|
||||
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
|
||||
* language governing rights and limitations under the License.
|
||||
*
|
||||
* The Original Code is the Venice Web Communities System.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
||||
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||
* Copyright (C) 2003 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
package com.silverwrist.venice;
|
||||
|
||||
import java.util.*;
|
||||
import org.apache.commons.lang.enum.*;
|
||||
|
||||
public final class SearchMode extends Enum
|
||||
{
|
||||
/*--------------------------------------------------------------------------------
|
||||
* The actual enumeration values
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
public static final SearchMode PREFIX = new SearchMode("PREFIX");
|
||||
public static final SearchMode SUBSTRING = new SearchMode("SUBSTRING");
|
||||
public static final SearchMode REGEXP = new SearchMode("REGEXP");
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Constructor
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
private SearchMode(String name)
|
||||
{
|
||||
super(name);
|
||||
|
||||
} // end constructor
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Standard static method implementations
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
public static SearchMode getEnum(String name)
|
||||
{
|
||||
return (SearchMode)getEnum(SearchMode.class,name);
|
||||
|
||||
} // end getEnum
|
||||
|
||||
public static Map getEnumMap()
|
||||
{
|
||||
return getEnumMap(SearchMode.class);
|
||||
|
||||
} // end getEnumMap
|
||||
|
||||
public static List getEnumList()
|
||||
{
|
||||
return getEnumList(SearchMode.class);
|
||||
|
||||
} // end getEnumList
|
||||
|
||||
public static Iterator iterator()
|
||||
{
|
||||
return iterator(SearchMode.class);
|
||||
|
||||
} // end iterator
|
||||
|
||||
} // end class SearchMode
|
|
@ -0,0 +1,241 @@
|
|||
/*
|
||||
* The contents of this file are subject to the Mozilla Public License Version 1.1
|
||||
* (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.mozilla.org/MPL/>.
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
|
||||
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
|
||||
* language governing rights and limitations under the License.
|
||||
*
|
||||
* The Original Code is the Venice Web Communities System.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
||||
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||
* Copyright (C) 2003 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
package com.silverwrist.venice.community;
|
||||
|
||||
import java.util.*;
|
||||
import com.silverwrist.dynamo.except.*;
|
||||
import com.silverwrist.venice.iface.VeniceCategory;
|
||||
|
||||
class CategoryImpl implements VeniceCategory
|
||||
{
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Internal class for saving category segments
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
private static class Segment
|
||||
{
|
||||
/*====================================================================
|
||||
* Attributes
|
||||
*====================================================================
|
||||
*/
|
||||
|
||||
private int id; // ID of this category
|
||||
private String name; // name of this segment
|
||||
|
||||
/*====================================================================
|
||||
* Constructor
|
||||
*====================================================================
|
||||
*/
|
||||
|
||||
Segment(int id, String name)
|
||||
{
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
|
||||
} // end constructor
|
||||
|
||||
/*====================================================================
|
||||
* Public getters
|
||||
*====================================================================
|
||||
*/
|
||||
|
||||
final int getID()
|
||||
{
|
||||
return id;
|
||||
|
||||
} // end getID
|
||||
|
||||
final String getName()
|
||||
{
|
||||
return name;
|
||||
|
||||
} // end getName
|
||||
|
||||
} // end class Segment
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Attributes
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
private CategoryManager m_mgr; // pointer to manager object
|
||||
private LinkedList m_cats; // the actual category segments
|
||||
private int m_symlink = -1; // if our category is actually a symlink
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Constructors
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
CategoryImpl(CategoryManager mgr)
|
||||
{
|
||||
m_mgr = mgr;
|
||||
m_cats = new LinkedList();
|
||||
|
||||
} // end constructor
|
||||
|
||||
CategoryImpl(CategoryManager mgr, int id, int symlink, String name)
|
||||
{
|
||||
m_mgr = mgr;
|
||||
m_cats = new LinkedList();
|
||||
m_symlink = symlink;
|
||||
m_cats.add(new Segment(id,name));
|
||||
|
||||
} // end constructor
|
||||
|
||||
CategoryImpl(CategoryImpl parent, int id, int symlink, String name)
|
||||
{
|
||||
m_mgr = parent.m_mgr;
|
||||
m_cats = (LinkedList)(parent.m_cats.clone());
|
||||
m_symlink = symlink;
|
||||
m_cats.add(new Segment(id,name));
|
||||
|
||||
} // end constructor
|
||||
|
||||
private CategoryImpl(CategoryImpl other, int copy_levels)
|
||||
{
|
||||
m_mgr = other.m_mgr;
|
||||
m_cats = new LinkedList();
|
||||
m_symlink = ((copy_levels==other.m_cats.size()) ? other.m_symlink : -1);
|
||||
Iterator it = other.m_cats.iterator();
|
||||
for (int i=0; i<copy_levels; i++)
|
||||
m_cats.add(it.next());
|
||||
|
||||
} // end constructor
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Implementations from interface VeniceCategory
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
public int getCategoryID()
|
||||
{
|
||||
if (m_cats.size()>0)
|
||||
return ((Segment)(m_cats.getLast())).getID();
|
||||
else
|
||||
return -1;
|
||||
|
||||
} // end getCategoryID
|
||||
|
||||
public int getNumLevels()
|
||||
{
|
||||
return m_cats.size();
|
||||
|
||||
} // end getNumLevels
|
||||
|
||||
public int getIDAtLevel(int level)
|
||||
{
|
||||
return ((Segment)(m_cats.get(level))).getID();
|
||||
|
||||
} // end getIDAtLevel
|
||||
|
||||
public String getTitleAtLevel(int level)
|
||||
{
|
||||
return ((Segment)(m_cats.get(level))).getName();
|
||||
|
||||
} // end getTitleAtLevel
|
||||
|
||||
public List getSubCategories() throws DatabaseException
|
||||
{
|
||||
return m_mgr.getCategorySublist(this.getLinkedCategoryID());
|
||||
|
||||
} // end getSubCategories
|
||||
|
||||
public VeniceCategory getSuperCategory(int levels)
|
||||
{
|
||||
return m_mgr.canonicalize(new CategoryImpl(this,levels));
|
||||
|
||||
} // end getSuperCategory
|
||||
|
||||
public VeniceCategory getParentCategory()
|
||||
{
|
||||
return m_mgr.canonicalize(new CategoryImpl(this,m_cats.size()-1));
|
||||
|
||||
} // end getParentCategoryID
|
||||
|
||||
public int getLinkedCategoryID()
|
||||
{
|
||||
if (m_symlink>=0)
|
||||
return m_symlink;
|
||||
else
|
||||
return this.getCategoryID();
|
||||
|
||||
} // end getLinkedCategoryID
|
||||
|
||||
public boolean isSymbolicLink()
|
||||
{
|
||||
return (m_symlink>=0);
|
||||
|
||||
} // end isSymbolicLink
|
||||
|
||||
public VeniceCategory getLinkedCategory() throws DatabaseException
|
||||
{
|
||||
if (m_symlink<0)
|
||||
return this;
|
||||
return (VeniceCategory)(m_mgr.lookup(m_symlink));
|
||||
|
||||
} // end getLinkedCategory
|
||||
|
||||
public boolean equals(Object obj)
|
||||
{
|
||||
if (obj==null)
|
||||
return false;
|
||||
if (obj instanceof VeniceCategory)
|
||||
return (((VeniceCategory)obj).getLinkedCategoryID()==this.getLinkedCategoryID());
|
||||
return this.toString().equals(obj.toString());
|
||||
|
||||
} // end equals
|
||||
|
||||
public int hashCode()
|
||||
{
|
||||
return this.getLinkedCategoryID();
|
||||
|
||||
} // end hashCode
|
||||
|
||||
public String toString()
|
||||
{
|
||||
StringBuffer buf = new StringBuffer();
|
||||
Iterator it = m_cats.iterator();
|
||||
while (it.hasNext())
|
||||
{ // concatenate all the parts together
|
||||
Segment seg = (Segment)(it.next());
|
||||
if (buf.length()>0)
|
||||
buf.append(": ");
|
||||
buf.append(seg.getName());
|
||||
|
||||
} // end while
|
||||
|
||||
return buf.toString();
|
||||
|
||||
} // end toString
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* External operations
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
void dispose()
|
||||
{
|
||||
m_mgr = null;
|
||||
m_cats.clear();
|
||||
m_cats = null;
|
||||
|
||||
} // end dispose
|
||||
|
||||
} // end class CategoryImpl
|
|
@ -0,0 +1,286 @@
|
|||
/*
|
||||
* The contents of this file are subject to the Mozilla Public License Version 1.1
|
||||
* (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.mozilla.org/MPL/>.
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
|
||||
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
|
||||
* language governing rights and limitations under the License.
|
||||
*
|
||||
* The Original Code is the Venice Web Communities System.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
||||
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||
* Copyright (C) 2003 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
package com.silverwrist.venice.community;
|
||||
|
||||
import java.util.*;
|
||||
import org.apache.commons.collections.*;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.w3c.dom.*;
|
||||
import com.silverwrist.util.xml.*;
|
||||
import com.silverwrist.dynamo.except.*;
|
||||
import com.silverwrist.dynamo.iface.*;
|
||||
import com.silverwrist.dynamo.util.*;
|
||||
import com.silverwrist.venice.SearchMode;
|
||||
import com.silverwrist.venice.iface.VeniceCategory;
|
||||
|
||||
public class CategoryManager implements NamedObject, ComponentInitialize, ComponentShutdown, CategoryService
|
||||
{
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Static data members
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
private static Logger logger = Logger.getLogger(CategoryManager.class);
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Attributes
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
private String m_name; // this object's name
|
||||
private CategoryOps m_ops; // database operations
|
||||
private ReferenceMap m_categories; // cached category values
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Constructor
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
public CategoryManager()
|
||||
{
|
||||
m_categories = new ReferenceMap(ReferenceMap.HARD,ReferenceMap.SOFT);
|
||||
|
||||
} // end constructor
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Internal operations
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
private final List convertList(List base) throws DatabaseException
|
||||
{
|
||||
if (base.isEmpty())
|
||||
return Collections.EMPTY_LIST;
|
||||
|
||||
ArrayList rc = new ArrayList(base.size());
|
||||
synchronized (this)
|
||||
{ // convert the tuples list ont a full category list
|
||||
Iterator it = base.iterator();
|
||||
while (it.hasNext())
|
||||
{ // get the tuple from the list and convert it
|
||||
CategoryTuple tuple = (CategoryTuple)(it.next());
|
||||
Integer key = new Integer(tuple.getCategoryID());
|
||||
VeniceCategory cat = (VeniceCategory)(m_categories.get(key));
|
||||
if (cat==null)
|
||||
{ // need to create a new category object and add it
|
||||
if (tuple.getParentCategoryID()<0)
|
||||
cat = new CategoryImpl(this,tuple.getCategoryID(),tuple.getSymlink(),tuple.getName());
|
||||
else
|
||||
cat = new CategoryImpl(lookup(tuple.getParentCategoryID()),tuple.getCategoryID(),tuple.getSymlink(),
|
||||
tuple.getName());
|
||||
m_categories.put(key,cat);
|
||||
|
||||
} // end if
|
||||
|
||||
rc.add(cat);
|
||||
|
||||
} // end while
|
||||
|
||||
} // end synchronized block
|
||||
|
||||
return Collections.unmodifiableList(rc);
|
||||
|
||||
} // end convertList
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Implementations from interface NamedObject
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
public String getName()
|
||||
{
|
||||
return m_name;
|
||||
|
||||
} // end getName
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Implementations from interface ComponentInitialize
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Initialize the component.
|
||||
*
|
||||
* @param config_root Pointer to the section of the Dynamo XML configuration file that configures this
|
||||
* particular component. This is to be considered "read-only" by the component.
|
||||
* @param services An implementation of {@link com.silverwrist.dynamo.iface.ServiceProvider ServiceProvider}
|
||||
* which provides initialization services to the component. This will include an implementation
|
||||
* of {@link com.silverwrist.dynamo.iface.ObjectProvider ObjectProvider} which may be used to
|
||||
* get information about other objects previously initialized by the application.
|
||||
* @exception com.silverwrist.dynamo.except.ConfigException If an error is encountered in the component
|
||||
* configuration.
|
||||
*/
|
||||
public void initialize(Element config_root, ServiceProvider services) throws ConfigException
|
||||
{
|
||||
logger.info("CategoryManager initializing");
|
||||
|
||||
XMLLoader loader = XMLLoader.get();
|
||||
String name_pool = null;
|
||||
try
|
||||
{ // verify the right node name
|
||||
loader.verifyNodeName(config_root,"object");
|
||||
|
||||
// get the object's name
|
||||
m_name = loader.getAttribute(config_root,"name");
|
||||
|
||||
// get the name of the database pool
|
||||
DOMElementHelper config_root_h = new DOMElementHelper(config_root);
|
||||
Element foo = loader.getSubElement(config_root_h,"database");
|
||||
name_pool = loader.getAttribute(foo,"connection");
|
||||
|
||||
} // end try
|
||||
catch (XMLLoadException e)
|
||||
{ // error loading XML config data
|
||||
logger.fatal("XML loader exception in StandardContentSupplier",e);
|
||||
throw new ConfigException(e);
|
||||
|
||||
} // end catch
|
||||
|
||||
// Get the database connection pool.
|
||||
DBConnectionPool pool = GetObjectUtils.getDatabaseConnection(services,name_pool);
|
||||
|
||||
// Get the operations object.
|
||||
m_ops = CategoryOps.get(pool);
|
||||
|
||||
} // end initialize
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Implementations from interface ComponentShutdown
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
public void shutdown()
|
||||
{
|
||||
m_categories.clear();
|
||||
m_ops = null;
|
||||
|
||||
} // end shutdown
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Implementations from interface CategoryService
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
public boolean isValidCategoryID(int catid)
|
||||
{
|
||||
if (catid==-1)
|
||||
return true; // valid by definition; it means "Top"
|
||||
if (m_categories.containsKey(new Integer(catid)))
|
||||
return true; // already present in our category map, it must be OK
|
||||
try
|
||||
{ // call down to the database
|
||||
return m_ops.verifyCategoryID(catid);
|
||||
|
||||
} // end try
|
||||
catch (DatabaseException e)
|
||||
{ // don't throw this exception!
|
||||
logger.warn("CategoryManager.isValidCategoryID(): database failure",e);
|
||||
|
||||
} // end catch
|
||||
|
||||
return false; // default return
|
||||
|
||||
} // end isValidCategoryID
|
||||
|
||||
public List getRootCategoryList() throws DatabaseException
|
||||
{
|
||||
return getCategorySublist(-1);
|
||||
|
||||
} // end getRootCategoryList
|
||||
|
||||
public VeniceCategory getCategory(int catid) throws DatabaseException
|
||||
{
|
||||
return (VeniceCategory)lookup(catid);
|
||||
|
||||
} // end getCategory
|
||||
|
||||
public List searchForCategories(SearchMode mode, String term, int offset, int count) throws DatabaseException
|
||||
{
|
||||
return convertList(m_ops.search(mode,term,offset,count));
|
||||
|
||||
} // end searchForCategories
|
||||
|
||||
public int getSearchCategoryCount(SearchMode mode, String term) throws DatabaseException
|
||||
{
|
||||
return m_ops.getSearchCount(mode,term);
|
||||
|
||||
} // end getSearchCategoryCount
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* External operations
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
synchronized CategoryImpl lookup(int catid) throws DatabaseException
|
||||
{
|
||||
Integer key = new Integer(catid);
|
||||
CategoryImpl rc = (CategoryImpl)(m_categories.get(key));
|
||||
if (rc!=null)
|
||||
return rc;
|
||||
|
||||
if (catid<0)
|
||||
{ // for "TOP" category, handle specially
|
||||
rc = new CategoryImpl(this);
|
||||
m_categories.put(key,rc);
|
||||
return rc;
|
||||
|
||||
} // end if
|
||||
|
||||
// look up the tuple for this category
|
||||
CategoryTuple tuple = m_ops.getCategory(catid);
|
||||
if (tuple==null)
|
||||
{ // category not found!
|
||||
DatabaseException de = new DatabaseException(CategoryManager.class,"CommunityMessages","cat.notfound");
|
||||
de.setParameter(0,String.valueOf(catid));
|
||||
throw de;
|
||||
|
||||
} // end if
|
||||
|
||||
if (tuple.getParentCategoryID()<0)
|
||||
rc = new CategoryImpl(this,tuple.getCategoryID(),tuple.getSymlink(),tuple.getName());
|
||||
else // recurse to look up the parent, and so on
|
||||
rc = new CategoryImpl(lookup(tuple.getParentCategoryID()),tuple.getCategoryID(),tuple.getSymlink(),
|
||||
tuple.getName());
|
||||
m_categories.put(key,rc);
|
||||
return rc;
|
||||
|
||||
} // end lookup
|
||||
|
||||
List getCategorySublist(int parentid) throws DatabaseException
|
||||
{
|
||||
return convertList(m_ops.getCategoriesList(parentid));
|
||||
|
||||
} // end getCategorySublist
|
||||
|
||||
synchronized VeniceCategory canonicalize(CategoryImpl obj)
|
||||
{
|
||||
Integer key = new Integer(obj.getCategoryID());
|
||||
VeniceCategory rc = (VeniceCategory)(m_categories.get(key));
|
||||
if (rc==null)
|
||||
{ // it wasn't in our refmap - it is now!
|
||||
m_categories.put(key,obj);
|
||||
rc = obj;
|
||||
|
||||
} // end if
|
||||
else // dispose of the unneeded second copy
|
||||
obj.dispose();
|
||||
return rc;
|
||||
|
||||
} // end canonicalize
|
||||
|
||||
} // end class CategoryManager
|
|
@ -0,0 +1,65 @@
|
|||
/*
|
||||
* The contents of this file are subject to the Mozilla Public License Version 1.1
|
||||
* (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.mozilla.org/MPL/>.
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
|
||||
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
|
||||
* language governing rights and limitations under the License.
|
||||
*
|
||||
* The Original Code is the Venice Web Communities System.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
||||
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||
* Copyright (C) 2003 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
package com.silverwrist.venice.community;
|
||||
|
||||
import java.util.*;
|
||||
import com.silverwrist.dynamo.db.OpsBase;
|
||||
import com.silverwrist.dynamo.except.*;
|
||||
import com.silverwrist.dynamo.iface.*;
|
||||
import com.silverwrist.venice.SearchMode;
|
||||
|
||||
abstract class CategoryOps extends OpsBase
|
||||
{
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Constructor
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
protected CategoryOps(DBConnectionPool pool)
|
||||
{
|
||||
super(pool);
|
||||
|
||||
} // end constructor
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Abstract operations
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
abstract boolean verifyCategoryID(int catid) throws DatabaseException;
|
||||
|
||||
abstract List getCategoriesList(int parent) throws DatabaseException;
|
||||
|
||||
abstract CategoryTuple getCategory(int catid) throws DatabaseException;
|
||||
|
||||
abstract List search(SearchMode mode, String term, int offset, int count) throws DatabaseException;
|
||||
|
||||
abstract int getSearchCount(SearchMode mode, String term) throws DatabaseException;
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* External static operations
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
static CategoryOps get(DBConnectionPool pool) throws ConfigException
|
||||
{
|
||||
return (CategoryOps)get(pool,CategoryOps.class.getClassLoader(),CategoryOps.class.getName() + "_","CategoryOps");
|
||||
|
||||
} // end get
|
||||
|
||||
} // end class CategoryOps
|
|
@ -0,0 +1,242 @@
|
|||
/*
|
||||
* The contents of this file are subject to the Mozilla Public License Version 1.1
|
||||
* (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.mozilla.org/MPL/>.
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
|
||||
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
|
||||
* language governing rights and limitations under the License.
|
||||
*
|
||||
* The Original Code is the Venice Web Communities System.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
||||
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||
* Copyright (C) 2003 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
package com.silverwrist.venice.community;
|
||||
|
||||
import java.sql.*;
|
||||
import java.util.*;
|
||||
import com.silverwrist.util.*;
|
||||
import com.silverwrist.dynamo.except.*;
|
||||
import com.silverwrist.dynamo.iface.*;
|
||||
import com.silverwrist.venice.SearchMode;
|
||||
|
||||
public class CategoryOps_mysql extends CategoryOps
|
||||
{
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Attributes
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
private DBUtilities m_utils;
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Constructor
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
public CategoryOps_mysql(DBConnectionPool pool)
|
||||
{
|
||||
super(pool);
|
||||
m_utils = (DBUtilities)(pool.queryService(DBUtilities.class));
|
||||
|
||||
} // end constructor
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Abstract implementations from class CategoryOps
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
boolean verifyCategoryID(int catid) throws DatabaseException
|
||||
{
|
||||
Connection conn = null;
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
try
|
||||
{ // get a connection
|
||||
conn = getConnection();
|
||||
|
||||
// prepare and execute the statement
|
||||
stmt = conn.prepareStatement("SELECT catid FROM refcategory WHERE catid = ? AND dontuse = 0;");
|
||||
stmt.setInt(1,catid);
|
||||
rs = stmt.executeQuery();
|
||||
return rs.next();
|
||||
|
||||
} // end try
|
||||
catch (SQLException e)
|
||||
{ // translate to a general DatabaseException
|
||||
throw generalException(e);
|
||||
|
||||
} // end catch
|
||||
finally
|
||||
{ // shut everything down
|
||||
SQLUtils.shutdown(rs);
|
||||
SQLUtils.shutdown(stmt);
|
||||
SQLUtils.shutdown(conn);
|
||||
|
||||
} // end finally
|
||||
|
||||
} // end verifyCategoryID
|
||||
|
||||
List getCategoriesList(int parent) throws DatabaseException
|
||||
{
|
||||
Connection conn = null;
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
try
|
||||
{ // get a connection
|
||||
conn = getConnection();
|
||||
|
||||
// create and execute the statement
|
||||
stmt = conn.prepareStatement("SELECT catid, symlink, name FROM refcategory WHERE parent = ? AND dontuse = 0 "
|
||||
+ "ORDER BY name;");
|
||||
stmt.setInt(1,parent);
|
||||
rs = stmt.executeQuery();
|
||||
|
||||
// create the return list of CategoryTuple values
|
||||
ArrayList rc = new ArrayList();
|
||||
while (rs.next())
|
||||
rc.add(new CategoryTuple(rs.getInt(1),parent,rs.getInt(2),rs.getString(3)));
|
||||
return rc;
|
||||
|
||||
} // end try
|
||||
catch (SQLException e)
|
||||
{ // translate to a general DatabaseException
|
||||
throw generalException(e);
|
||||
|
||||
} // end catch
|
||||
finally
|
||||
{ // shut everything down
|
||||
SQLUtils.shutdown(rs);
|
||||
SQLUtils.shutdown(stmt);
|
||||
SQLUtils.shutdown(conn);
|
||||
|
||||
} // end finally
|
||||
|
||||
} // end getCategoriesList
|
||||
|
||||
CategoryTuple getCategory(int catid) throws DatabaseException
|
||||
{
|
||||
Connection conn = null;
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
try
|
||||
{ // get a connection
|
||||
conn = getConnection();
|
||||
|
||||
// create and execute the statement
|
||||
stmt = conn.prepareStatement("SELECT parent, symlink, name FROM refcategory WHERE catid = ? AND dontuse = 0;");
|
||||
stmt.setInt(1,catid);
|
||||
rs = stmt.executeQuery();
|
||||
|
||||
if (rs.next())
|
||||
return new CategoryTuple(catid,rs.getInt(1),rs.getInt(2),rs.getString(3));
|
||||
else
|
||||
return null;
|
||||
|
||||
} // end try
|
||||
catch (SQLException e)
|
||||
{ // translate to a general DatabaseException
|
||||
throw generalException(e);
|
||||
|
||||
} // end catch
|
||||
finally
|
||||
{ // shut everything down
|
||||
SQLUtils.shutdown(rs);
|
||||
SQLUtils.shutdown(stmt);
|
||||
SQLUtils.shutdown(conn);
|
||||
|
||||
} // end finally
|
||||
|
||||
} // end getCategory
|
||||
|
||||
List search(SearchMode mode, String term, int offset, int count) throws DatabaseException
|
||||
{
|
||||
Connection conn = null;
|
||||
Statement stmt = null;
|
||||
ResultSet rs = null;
|
||||
try
|
||||
{ // get a connection
|
||||
conn = getConnection();
|
||||
|
||||
// build the SQL statement as a string
|
||||
StringBuffer sql = new StringBuffer("SELECT catid, parent, symlink, name FROM refcategory WHERE name ");
|
||||
if (SearchMode.PREFIX.equals(mode))
|
||||
sql.append("LIKE '").append(m_utils.encodeStringWildcards(term)).append("%'");
|
||||
else if (SearchMode.SUBSTRING.equals(mode))
|
||||
sql.append("LIKE '%").append(m_utils.encodeStringWildcards(term)).append("%'");
|
||||
else if (SearchMode.REGEXP.equals(mode))
|
||||
sql.append("REGEXP '").append(m_utils.encodeString(term)).append('\'');
|
||||
sql.append(" AND dontuse = 0 ORDER BY parent, name LIMIT ").append(offset).append(", ").append(count+1);
|
||||
sql.append(';');
|
||||
|
||||
// execute the operation!
|
||||
stmt = conn.createStatement();
|
||||
rs = stmt.executeQuery(sql.toString());
|
||||
|
||||
// create the return list of CategoryTuple values
|
||||
ArrayList rc = new ArrayList(count+1);
|
||||
while (rs.next())
|
||||
rc.add(new CategoryTuple(rs.getInt(1),rs.getInt(2),rs.getInt(3),rs.getString(4)));
|
||||
return rc;
|
||||
|
||||
} // end try
|
||||
catch (SQLException e)
|
||||
{ // translate to a general DatabaseException
|
||||
throw generalException(e);
|
||||
|
||||
} // end catch
|
||||
finally
|
||||
{ // shut everything down
|
||||
SQLUtils.shutdown(rs);
|
||||
SQLUtils.shutdown(stmt);
|
||||
SQLUtils.shutdown(conn);
|
||||
|
||||
} // end finally
|
||||
|
||||
} // end searchForCategories
|
||||
|
||||
int getSearchCount(SearchMode mode, String term) throws DatabaseException
|
||||
{
|
||||
Connection conn = null;
|
||||
Statement stmt = null;
|
||||
ResultSet rs = null;
|
||||
try
|
||||
{ // get a connection
|
||||
conn = getConnection();
|
||||
|
||||
// build the SQL statement as a string
|
||||
StringBuffer sql = new StringBuffer("SELECT COUNT(*) FROM refcategory WHERE name ");
|
||||
if (SearchMode.PREFIX.equals(mode))
|
||||
sql.append("LIKE '").append(m_utils.encodeStringWildcards(term)).append("%'");
|
||||
else if (SearchMode.SUBSTRING.equals(mode))
|
||||
sql.append("LIKE '%").append(m_utils.encodeStringWildcards(term)).append("%'");
|
||||
else if (SearchMode.REGEXP.equals(mode))
|
||||
sql.append("REGEXP '").append(m_utils.encodeString(term)).append('\'');
|
||||
sql.append(" AND dontuse = 0;");
|
||||
|
||||
// execute the operation!
|
||||
stmt = conn.createStatement();
|
||||
rs = stmt.executeQuery(sql.toString());
|
||||
return SQLUtils.getReturnCountInt(rs,1);
|
||||
|
||||
} // end try
|
||||
catch (SQLException e)
|
||||
{ // translate to a general DatabaseException
|
||||
throw generalException(e);
|
||||
|
||||
} // end catch
|
||||
finally
|
||||
{ // shut everything down
|
||||
SQLUtils.shutdown(rs);
|
||||
SQLUtils.shutdown(stmt);
|
||||
SQLUtils.shutdown(conn);
|
||||
|
||||
} // end finally
|
||||
|
||||
} // end getSearchCount
|
||||
|
||||
} // end class CategoryOps_mysql
|
|
@ -0,0 +1,37 @@
|
|||
/*
|
||||
* The contents of this file are subject to the Mozilla Public License Version 1.1
|
||||
* (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.mozilla.org/MPL/>.
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
|
||||
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
|
||||
* language governing rights and limitations under the License.
|
||||
*
|
||||
* The Original Code is the Venice Web Communities System.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
||||
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||
* Copyright (C) 2003 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
package com.silverwrist.venice.community;
|
||||
|
||||
import java.util.List;
|
||||
import com.silverwrist.dynamo.except.DatabaseException;
|
||||
import com.silverwrist.venice.SearchMode;
|
||||
import com.silverwrist.venice.iface.VeniceCategory;
|
||||
|
||||
public interface CategoryService
|
||||
{
|
||||
public boolean isValidCategoryID(int catid);
|
||||
|
||||
public List getRootCategoryList() throws DatabaseException;
|
||||
|
||||
public VeniceCategory getCategory(int catid) throws DatabaseException;
|
||||
|
||||
public List searchForCategories(SearchMode mode, String term, int offset, int count) throws DatabaseException;
|
||||
|
||||
public int getSearchCategoryCount(SearchMode mode, String term) throws DatabaseException;
|
||||
|
||||
} // end interface CategoryService
|
|
@ -0,0 +1,75 @@
|
|||
/*
|
||||
* The contents of this file are subject to the Mozilla Public License Version 1.1
|
||||
* (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.mozilla.org/MPL/>.
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
|
||||
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
|
||||
* language governing rights and limitations under the License.
|
||||
*
|
||||
* The Original Code is the Venice Web Communities System.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
||||
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||
* Copyright (C) 2003 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
package com.silverwrist.venice.community;
|
||||
|
||||
class CategoryTuple
|
||||
{
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Attributes
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
private int m_catid;
|
||||
private int m_parent;
|
||||
private int m_symlink;
|
||||
private String m_name;
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Constructor
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
CategoryTuple(int catid, int parent, int symlink, String name)
|
||||
{
|
||||
m_catid = catid;
|
||||
m_parent = parent;
|
||||
m_symlink = symlink;
|
||||
m_name = name;
|
||||
|
||||
} // end constructor
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Public getters
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
int getCategoryID()
|
||||
{
|
||||
return m_catid;
|
||||
|
||||
} // end getCategoryID
|
||||
|
||||
int getParentCategoryID()
|
||||
{
|
||||
return m_parent;
|
||||
|
||||
} // end getParentCategoryID
|
||||
|
||||
int getSymlink()
|
||||
{
|
||||
return m_symlink;
|
||||
|
||||
} // end getSymLink
|
||||
|
||||
String getName()
|
||||
{
|
||||
return m_name;
|
||||
|
||||
} // end getName
|
||||
|
||||
} // end class CategoryTuple
|
|
@ -0,0 +1,18 @@
|
|||
# The contents of this file are subject to the Mozilla Public License Version 1.1
|
||||
# (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.mozilla.org/MPL/>.
|
||||
#
|
||||
# Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
|
||||
# WARRANTY OF ANY KIND, either express or implied. See the License for the specific
|
||||
# language governing rights and limitations under the License.
|
||||
#
|
||||
# The Original Code is the Venice Web Communities System.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
||||
# for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||
# Copyright (C) 2003 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
# ---------------------------------------------------------------------------------
|
||||
# This file has been localized for the en_US locale
|
||||
cat.notfound=The category with ID#{0} does not exist in the database.
|
|
@ -0,0 +1,51 @@
|
|||
/*
|
||||
* The contents of this file are subject to the Mozilla Public License Version 1.1
|
||||
* (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.mozilla.org/MPL/>.
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
|
||||
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
|
||||
* language governing rights and limitations under the License.
|
||||
*
|
||||
* The Original Code is the Venice Web Communities System.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
||||
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||
* Copyright (C) 2003 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
package com.silverwrist.venice.iface;
|
||||
|
||||
import java.util.List;
|
||||
import com.silverwrist.dynamo.except.DatabaseException;
|
||||
|
||||
public interface VeniceCategory
|
||||
{
|
||||
public int getCategoryID();
|
||||
|
||||
public int getNumLevels();
|
||||
|
||||
public int getIDAtLevel(int level);
|
||||
|
||||
public String getTitleAtLevel(int level);
|
||||
|
||||
public List getSubCategories() throws DatabaseException;
|
||||
|
||||
public VeniceCategory getSuperCategory(int levels);
|
||||
|
||||
public VeniceCategory getParentCategory();
|
||||
|
||||
public int getLinkedCategoryID();
|
||||
|
||||
public boolean isSymbolicLink();
|
||||
|
||||
public VeniceCategory getLinkedCategory() throws DatabaseException;
|
||||
|
||||
public boolean equals(Object obj);
|
||||
|
||||
public int hashCode();
|
||||
|
||||
public String toString();
|
||||
|
||||
} // end interface VeniceCategory
|
|
@ -20,6 +20,7 @@ package com.silverwrist.venice.script;
|
|||
import com.silverwrist.dynamo.Namespaces;
|
||||
import com.silverwrist.dynamo.except.*;
|
||||
import com.silverwrist.dynamo.iface.*;
|
||||
import com.silverwrist.venice.community.CategoryService;
|
||||
import com.silverwrist.venice.iface.*;
|
||||
|
||||
public class LibraryVeniceCast
|
||||
|
@ -86,6 +87,12 @@ public class LibraryVeniceCast
|
|||
|
||||
} // end queryButtonProvider
|
||||
|
||||
public final CategoryService queryCategoryService(Object obj)
|
||||
{
|
||||
return (CategoryService)query(obj,CategoryService.class);
|
||||
|
||||
} // end queryCategoryService
|
||||
|
||||
public final ContentBlockProvider queryContentBlockProvider(Object obj)
|
||||
{
|
||||
return (ContentBlockProvider)query(obj,ContentBlockProvider.class);
|
||||
|
|
Loading…
Reference in New Issue
Block a user