diff --git a/conf-sso/sp/dynamo.xml b/conf-sso/sp/dynamo.xml index a046b24..b037d1e 100644 --- a/conf-sso/sp/dynamo.xml +++ b/conf-sso/sp/dynamo.xml @@ -165,6 +165,10 @@ + + + + diff --git a/conf/dynamo-venice.xml b/conf/dynamo-venice.xml index 0228f61..c703556 100644 --- a/conf/dynamo-venice.xml +++ b/conf/dynamo-venice.xml @@ -164,6 +164,10 @@ + + + + diff --git a/conf/venice-db-init-mysql.sql b/conf/venice-db-init-mysql.sql index f71e8ca..4563f03 100644 --- a/conf/venice-db-init-mysql.sql +++ b/conf/venice-db-init-mysql.sql @@ -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 ; +# 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); diff --git a/src/venice-base/com/silverwrist/venice/SearchMode.java b/src/venice-base/com/silverwrist/venice/SearchMode.java new file mode 100644 index 0000000..7bb9add --- /dev/null +++ b/src/venice-base/com/silverwrist/venice/SearchMode.java @@ -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 . + * + * 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 , + * 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 diff --git a/src/venice-base/com/silverwrist/venice/community/CategoryImpl.java b/src/venice-base/com/silverwrist/venice/community/CategoryImpl.java new file mode 100644 index 0000000..61d8704 --- /dev/null +++ b/src/venice-base/com/silverwrist/venice/community/CategoryImpl.java @@ -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 . + * + * 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 , + * 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; i0) + 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 diff --git a/src/venice-base/com/silverwrist/venice/community/CategoryManager.java b/src/venice-base/com/silverwrist/venice/community/CategoryManager.java new file mode 100644 index 0000000..836b168 --- /dev/null +++ b/src/venice-base/com/silverwrist/venice/community/CategoryManager.java @@ -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 . + * + * 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 , + * 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 diff --git a/src/venice-base/com/silverwrist/venice/community/CategoryOps.java b/src/venice-base/com/silverwrist/venice/community/CategoryOps.java new file mode 100644 index 0000000..2cce28a --- /dev/null +++ b/src/venice-base/com/silverwrist/venice/community/CategoryOps.java @@ -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 . + * + * 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 , + * 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 diff --git a/src/venice-base/com/silverwrist/venice/community/CategoryOps_mysql.java b/src/venice-base/com/silverwrist/venice/community/CategoryOps_mysql.java new file mode 100644 index 0000000..8b95d40 --- /dev/null +++ b/src/venice-base/com/silverwrist/venice/community/CategoryOps_mysql.java @@ -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 . + * + * 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 , + * 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 diff --git a/src/venice-base/com/silverwrist/venice/community/CategoryService.java b/src/venice-base/com/silverwrist/venice/community/CategoryService.java new file mode 100644 index 0000000..2e42be5 --- /dev/null +++ b/src/venice-base/com/silverwrist/venice/community/CategoryService.java @@ -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 . + * + * 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 , + * 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 diff --git a/src/venice-base/com/silverwrist/venice/community/CategoryTuple.java b/src/venice-base/com/silverwrist/venice/community/CategoryTuple.java new file mode 100644 index 0000000..27cbe8e --- /dev/null +++ b/src/venice-base/com/silverwrist/venice/community/CategoryTuple.java @@ -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 . + * + * 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 , + * 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 diff --git a/src/venice-base/com/silverwrist/venice/community/CommunityMessages.properties b/src/venice-base/com/silverwrist/venice/community/CommunityMessages.properties new file mode 100644 index 0000000..61e4490 --- /dev/null +++ b/src/venice-base/com/silverwrist/venice/community/CommunityMessages.properties @@ -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 . +# +# 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 , +# 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. diff --git a/src/venice-base/com/silverwrist/venice/iface/VeniceCategory.java b/src/venice-base/com/silverwrist/venice/iface/VeniceCategory.java new file mode 100644 index 0000000..ac01887 --- /dev/null +++ b/src/venice-base/com/silverwrist/venice/iface/VeniceCategory.java @@ -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 . + * + * 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 , + * 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 diff --git a/src/venice-base/com/silverwrist/venice/script/LibraryVeniceCast.java b/src/venice-base/com/silverwrist/venice/script/LibraryVeniceCast.java index db3773d..c1c2292 100644 --- a/src/venice-base/com/silverwrist/venice/script/LibraryVeniceCast.java +++ b/src/venice-base/com/silverwrist/venice/script/LibraryVeniceCast.java @@ -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);